我有2个Linux系统。一个系统将通过 SSH 不断连接到另一台计算机。
如果它检测到连接关闭,它将再次通过 ssh 连接,并运行特定命令。
这是否可能?
我看到了 cronjob,但它没有检测到 ssh 关闭连接或类似的情况。
答案1
由于 ssh 在连接中断时退出,因此您可以编写一个脚本,在无限循环中启动 ssh,或者在 ssh 退出代码为 255(发生错误)时重复的条件循环中启动 ssh。这样脚本将等待 ssh 退出,如果是由于错误,则重新启动它。或者您可以使用autossh
,正如 Adrian Zaugg 建议的那样。您没有指定足够的设置细节来获得更具体的答案。
这是一个“通用”示例,但由于您的具体情况,它可能不适合您:
您的服务器应设置为接受公钥身份验证,并且应授权客户端的公钥。
客户端计算机上的 ~/.ssh/config 文件应该对要连接的主机进行设置,以便 ssh 客户端不需要交互并发送 ping 数据包来检测断开连接:
Host serverhost User username IdentityFile /home/user/.ssh/id_rsa ServerAliveInterval 30 ServerAliveCountMax 2
这里的设置IdentityFile
是用于身份验证的私钥的名称,ServerAliveInterval
是 ping 之间的秒数,以及ServerAliveCountMax
有多少个未响应的 ping 将导致 ssh 退出。通过上述设置,一分钟后将检测到断开的连接。
- 您的脚本应该只启动一次(或者记住它的 PID 并在重新启动时杀死前一个实例)。该脚本可能如下所示:
#!/bin/sh while true ; do ssh serverhost if [ $? -ne 255 ] ; then break fi done
这假设您安装了 sh shell,您的私钥没有密码,您不希望 ssh 会话在后台运行,并且不打算重新启动脚本,直到您完全退出 ssh 会话。这是很多假设,所以正如我所说,我需要细节才能清楚地回答。抱歉,我没时间猜测。