Экран не может выпустить pty

672
kidmose

На моем компьютере с 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 
2
Где именно «сокат» входит в картину? lemonsqueeze 9 лет назад 0
Я запускаю socat с TCP-сервером и псевдотерминалом (pty), чтобы я мог запустить оболочку на другом компьютере и перенаправить ввод-вывод из оболочки через TCP на pty. Моя цель - создать удаленную оболочку, но из-за NAT мне нужен «SSH Server», чтобы инициировать соединение. Имеет ли это смысл? kidmose 9 лет назад 0
Почти. Итак, у вас есть две машины A и B. Вы хотите удаленную оболочку на A от B, но вы не можете, потому что A имеет NAT. Таким образом, у вас есть A, соединяющийся с B вместо socat и выполняющий некоторые сантехнические работы: `[A: sh -> socat] -> [B: socat -> pty -> screen]`. Что-то вроде этого ? lemonsqueeze 9 лет назад 1
Ага. Хороший способ форматирования это :) kidmose 9 лет назад 0
Хорошо, какую команду вы используете для socat на B? lemonsqueeze 9 лет назад 0
Проверьте это также http://superuser.com/questions/874133/screen-vs-socat/ 0andriy 9 лет назад 0

1 ответ на вопрос

2
lemonsqueeze

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

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

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

Похоже, именно то, что я пытался достичь. Спасибо! kidmose 9 лет назад 0

Похожие вопросы