2

На моем 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 $ echo "uname -a" > /dev/pts/9 && cat /dev/pts/9 
bash: /dev/pts/9: Device or resource busy

Некоторая информация:

 /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

1 ответ1

2

Предложение: в этой ситуации я бы пошел с обратным SSH- соединением:

Вместо того, чтобы ваша машина выполняла ssh, серверная машина выполняет ssh и через переадресацию портов гарантирует, что вы можете ssh вернуться на серверную машину.

Но это, конечно, не так весело, как создавать его самостоятельно с помощью socat. Я все еще рекомендую разобраться с этой проблемой, это хороший способ учиться.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .