网络中断后自动(或更轻松地)重新连接到屏幕会话

dre*_*ves 55 ssh scripting automation gnu-screen

补充:我相信这个问题现在归入了这个问题: 完全透明地自动使用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
Run Code Online (Sandbox Code Playgroud)

它将显示server.com上可用的屏幕列表,如[1]:

123.pts-1
456.pts-2
Run Code Online (Sandbox Code Playgroud)

然后你可能会尝试这样做:

laptop> ssh server.com screen -dr pts-2
Run Code Online (Sandbox Code Playgroud)

但那失败了,说"必须连接到终端".你必须首先ssh然后在server.com上执行"screen -dr pts-2",如果你有一个片状连接并断开很多连接,这是不好的.您希望能够通过笔记本电脑上的简单"向上箭头输入"继续.(或者让它更自动化.)

我对这个问题有一个可怕的解决方案,我将其作为答案发布,希望它能够被遗忘以支持正确的方法来解决这个问题.


脚注:

[1]或者,更好的是,如果您使用" screen -S foo"和" screen -S bar" 等名称创建了屏幕会话,那么您将获得更友好的列表,如:

123.foo
456.bar
Run Code Online (Sandbox Code Playgroud)

并且可以重新连接,例如" screen -dr foo".


迷你屏幕教程,结合这个问题的答案:

登录到server.com并执行操作

screen -S foo 
Run Code Online (Sandbox Code Playgroud)

然后再也不会退出该会话.要从其他地方重新连接,请执行此操作

ssh -t server.com screen -dr foo
Run Code Online (Sandbox Code Playgroud)

列出要重新协调的可用屏幕:

screen -ls
Run Code Online (Sandbox Code Playgroud)

或者,当然,

ssh server.com screen -ls
Run Code Online (Sandbox Code Playgroud)

远程检查server.com的可用屏幕.

我现在使用以下别名(tcsh),基于Jason的答案,连接到命名屏幕(如果存在)或创建并连接:

alias ssc 'ssh -t \!:1 "screen -S \!:2 -dr || screen -S \!:2"'
Run Code Online (Sandbox Code Playgroud)

Gre*_*ill 59

-t选项是否符合您的要求?

     -t      Force pseudo-tty allocation.  This can be used to execute arbi-
             trary screen-based programs on a remote machine, which can be
             very useful, e.g. when implementing menu services.  Multiple -t
             options force tty allocation, even if ssh has no local tty.

所以:

laptop> ssh -t server.com screen -dr pts-2
Run Code Online (Sandbox Code Playgroud)

这似乎适用于我的安装.

  • 神圣的废话,我简直不敢相信!我实际上想出了几年前的怪物.我要告诉自己它早于-t选项.:)非常感谢您提供真正的答案! (6认同)