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

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

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

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

有没有一种优雅的方法来实现这个自动化?具体来说:

  • 一旦检测到 Internet 连接,如果 ssh 会话断开,则重新连接

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

感谢您提供任何有关此问题的建议

答案1

您可以运行此命令: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,这是 screen 的更现代实现。我实际上将上述脚本与 screen 一起使用。您可能还想使用命名的 screen 会话,而不仅仅是像示例中那样使用 pid。

答案2

不需要破解 bash 循环。你需要研究一下自动SSH。我自己没有用过很多次,但我的理解是,你只需在命令中用ssh替换即可。autossh

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

相关内容