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

GJ.*_*GJ. 10 linux ssh gnu-screen

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

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

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

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

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

感谢您提供有关此的任何提示

Jas*_*son 11

你可以运行这个:ssh -t hostname screen -r 3453重新连接。如果你想循环执行,我会在脚本中使用以下内容。

while true; do
    ssh -t -o BatchMode=yes eeepc-rsi "screen -r 3453"
    sleep 2
done
Run Code Online (Sandbox Code Playgroud)

如果您有 ssh-keys 设置,这将最有效,这样您就可以在不输入密码的情况下登录。我还建议您查看 tmux,这是一种更现代的屏幕实现。我实际上将上述脚本与屏幕一起使用。您可能还想使用命名的屏幕会话,而不是像您在示例中那样仅使用 pid。


Rya*_*son 5

无需破解 bash 循环。您需要查看autossh。我自己并没有经常使用它,但我的理解是您只需在命令中替换sshwith即可autossh

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