ssh -t user @ server screen -rR screenName
ЛЕНО: Этот вопрос теперь, я полагаю, включен в этот:Использование 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"'