На моем компьютере с Linux screenя могу открывать, читать и писать в псевдотерминал с помощью screen. После закрытия (Ca ky) я не могу подключиться к нему снова, без перезапуска socat, что обеспечивает псевдотерминал.
Просто после запуска socatвсе выглядит так:
/home/kidmose $ fuser /dev/pts/9 /dev/pts/9: 20960 /home/kidmose $ lsof /dev/pts/9 COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME socat 20960 kidmose 5u CHR 136,9 0t0 12 /dev/pts/9
и я могу написать и прочитать, как ожидалось:
/home/kidmose $ echo "uname -a" > /dev/pts/9 && cat /dev/pts/9 uname -a Linux egki-laptop-linuxmint 3.13.0-24-generic #47-Ubuntu SMP Fri May 2 23:30:00 UTC 2014 x86_64 x86_64 x86_64 GNU/Linux
Запуск screenтакже работает один раз (я могу написать и прочитать ожидаемый результат):
/home/kidmose $ screen /dev/pts/9 uname -a # My input Linux egki-laptop-linuxmint 3.13.0-24-generic #47-Ubuntu SMP Fri May 2 23:30:00 UTC 2014 x86_64 x86_64 x86_64 GNU/Linux # Response (C-a k y) # I kill the window and screen terminates ([screen is terminating])
Теперь я больше не могу ни связываться, screenни просто писать. Экран сразу закрывается, [screen is terminating]и при попытке записи появляется следующая ошибка:
/home/kidmose $ fuser /dev/pts/9 /dev/pts/9: 20960 /home/kidmose $ lsof /dev/pts/9 COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME socat 20960 kidmose 5u CHR 136,9te 0t0 12 /dev/pts/9 /home/kidmose $
Любые идеи о том, почему он «занят» / недоступен?
Я заметил, что ' te' появляется в lsofвыводе. Есть какое-нибудь объяснение этому?
Моя конечная цель - иметь виртуальный терминал на удаленном устройстве. Из-за NAT и т. Д. Мне нужно, чтобы удаленное устройство позвонило на сервер, где будет находиться виртуальный терминал.
Изменить: как lemonsqueeze выразить это в своем комментарии :
[A: sh -> socat] --> [B: socat -> pty -> screen] Machine A TCP Machine B
Где именно «сокат» входит в картину?
lemonsqueeze 10 лет назад
0
Я запускаю socat с TCP-сервером и псевдотерминалом (pty), чтобы я мог запустить оболочку на другом компьютере и перенаправить ввод-вывод из оболочки через TCP на pty. Моя цель - создать удаленную оболочку, но из-за NAT мне нужен «SSH Server», чтобы инициировать соединение. Имеет ли это смысл?
kidmose 10 лет назад
0
Почти. Итак, у вас есть две машины A и B. Вы хотите удаленную оболочку на A от B, но вы не можете, потому что A имеет NAT. Таким образом, у вас есть A, соединяющийся с B вместо socat и выполняющий некоторые сантехнические работы: `[A: sh -> socat] -> [B: socat -> pty -> screen]`. Что-то вроде этого ?
lemonsqueeze 10 лет назад
1
Ага. Хороший способ форматирования это :)
kidmose 10 лет назад
0
Хорошо, какую команду вы используете для socat на B?
lemonsqueeze 10 лет назад
0
Проверьте это также http://superuser.com/questions/874133/screen-vs-socat/
0andriy 9 лет назад
0
1 ответ на вопрос
2
lemonsqueeze
Предложение: в этой ситуации я бы пошел с обратным SSH- соединением:
Вместо того, чтобы ваша машина выполняла ssh, серверная машина выполняет ssh и через переадресацию портов гарантирует, что вы можете ssh вернуться на сервер.
Но это, конечно, не так весело, как создавать его самостоятельно с помощью socat. Я все еще рекомендую разобраться с этой проблемой, это хороший способ учиться.
Похоже, именно то, что я пытался достичь. Спасибо!
kidmose 10 лет назад
0