ДОБАВЛЕНО: Я полагаю, что этот вопрос теперь включен в этот вопрос:
Использование GNU Screen полностью прозрачно и автоматически
Смотрите также этот связанный вопрос:
https://superuser.com/questions/147873/ssh-sessions-in-xterms-freeze-for-many-minutes-whenever-they-disconnect
Оригинальный вопрос:
Было бы неплохо, если бы существовал способ подключиться к машине по ssh и немедленно подключиться к определенной сессии экрана. Вы можете сделать это:
laptop> ssh server.com screen -ls
, и он покажет список экранов, доступных на server.com, например, [1]:
123.pts-1
456.pts-2
И тогда вы можете попытаться сделать это:
laptop> ssh server.com screen -dr pts-2
но это не помогает, говоря: «Должен быть подключен к терминалу».
Сначала вы должны выполнить ssh, а затем выполнить «screen -dr pts-2» на server.com, что не очень хорошо, если у вас нестабильное соединение и вы часто отключаетесь. Вы хотите иметь возможность возобновить с помощью простого «ввода со стрелкой вверх» на ноутбуке. (Или, возможно, сделать его еще более автоматическим.)
У меня есть смешное решение этой проблемы, которое я опубликую в качестве ответа, и надеюсь, что оно обернется забвением в пользу Правильного пути решения этой проблемы.
Сноски:
[1] Или, лучше, если вы создали сеансы экрана с именами, такими как "screen -S foo
" и "screen -S bar
", тогда вы получите более дружелюбный список, например:
123.foo
456.bar
и может восстановить соединение, например, с "screen -dr foo
".
Мини-урок, включающий ответ на этот вопрос:
Войдите в систему на server.com и выполните
screen -S foo
и никогда больше не выходить из этого сеанса.
Чтобы подключиться к нему из другого места, выполните
ssh -t server.com screen -dr foo
Для просмотра списка доступных экранов, к которым необходимо подключиться:
screen -ls
или, конечно же,
ssh server.com screen -ls
для удаленной проверки доступных экранов server.com.
Теперь я использую следующий псевдоним (tcsh), основанный на ответе Джейсона ниже, чтобы подключиться к именованному экрану, если он существует, или создать и подключить иначе:
alias ssc 'ssh -t \!:1 "screen -S \!:2 -dr || screen -S \!:2"'