你能检测到 ssh 连接是否关闭吗?

你能检测到 ssh 连接是否关闭吗?

我有2个Linux系统。一个系统将通过 SSH 不断连接到另一台计算机。

如果它检测到连接关闭,它将再次通过 ssh 连接,并运行特定命令。

这是否可能?

我看到了 cronjob,但它没有检测到 ssh 关闭连接或类似的情况。

答案1

由于 ssh 在连接中断时退出,因此您可以编写一个脚本,在无限循环中启动 ssh,或者在 ssh 退出代码为 255(发生错误)时重复的条件循环中启动 ssh。这样脚本将等待 ssh 退出,如果是由于错误,则重新启动它。或者您可以使用autossh,正如 Adrian Zaugg 建议的那样。您没有指定足够的设置细节来获得更具体的答案。

这是一个“通用”示例,但由于您的具体情况,它可能不适合您:

  1. 您的服务器应设置为接受公钥身份验证,并且应授权客户端的公钥。

  2. 客户端计算机上的 ~/.ssh/config 文件应该对要连接的主机进行设置,以便 ssh 客户端不需要交互并发送 ping 数据包来检测断开连接:

Host serverhost
User username
IdentityFile /home/user/.ssh/id_rsa
ServerAliveInterval 30
ServerAliveCountMax 2

这里的设置IdentityFile是用于身份验证的私钥的名称,ServerAliveInterval是 ping 之间的秒数,以及ServerAliveCountMax有多少个未响应的 ping 将导致 ssh 退出。通过上述设置,一分钟后将检测到断开的连接。

  1. 您的脚本应该只启动一次(或者记住它的 PID 并在重新启动时杀死前一个实例)。该脚本可能如下所示:
#!/bin/sh
while true ; do
  ssh serverhost
  if [ $? -ne 255 ] ; then
     break
  fi
done

这假设您安装了 sh shell,您的私钥没有密码,您不希望 ssh 会话在后台运行,并且不打算重新启动脚本,直到您完全退出 ssh 会话。这是很多假设,所以正如我所说,我需要细节才能清楚地回答。抱歉,我没时间猜测。

相关内容