使用特定的“屏幕”会话自动重新连接SSH连接


10

我通常有几个终端窗口,每个窗口都通过ssh连接到远程服务器。在每个窗口中,我都使用gnu屏幕程序来确保在断开连接的情况下交互过程的持久性。

目前,每当ssh连接断开时(例如,当我使客户端计算机进入睡眠状态时),我都必须手动繁琐地重新启动每个窗口中的ssh会话,然后在每个窗口中繁琐地恢复特定的屏幕会话(例如,“ screen-在一个窗口中显示“ r 3453”,在另一个窗口中显示“ screen -r 3462”等)

有没有一种优雅的方式可以自动执行此操作?特别:

  • 如果检测到Internet连接,请重新连接ssh会话(如果丢失)

  • ssh重新连接后,立即为终端窗口运行特定的屏幕实例

感谢您的任何提示

Answers:


10

您可以运行以下命令:ssh -t hostname screen -r 3453重新连接。如果要循环执行,请在脚本中使用以下内容。

while true; do
    ssh -t -o BatchMode=yes eeepc-rsi "screen -r 3453"
    sleep 2
done

如果您已设置ssh-keys,则此方法效果最好,因此您无需输入密码即可登录。我还建议您查看tmux,这是一种更现代的屏幕实现。我实际上在屏幕上使用了上面的脚本。您可能还希望使用命名屏幕会话,而不是像示例中那样仅使用pid。


谢谢!“ -o BatchMode = yes”到底是什么?
GJ。

它将不提示您输入密码。来自'man ssh_config'的信息:“密码/密码查询将被禁用。此选项在脚本和其他没有用户提供密码的批处理作业中很有用。” 因此,仅当您已经设置了ssh-key时,才使用它。
杰森·阿克森

5

无需修改bash循环。您需要研究autossh。我本人并没有使用太多,但是我的理解是,您只需在命令中替换sshautossh

编辑:实际上,autossh附带了一个名为的脚本,该脚本rscreen似乎正是为此目的而设计的。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.