我们有一个旧系统,其中一组计算机中,只有一台被配置为“实时”计算机,其余的都是故障转移计算机。我们曾经使用 ping 来确定哪个是哪个,但是,安全更新现在使 ping 变得无用。
我发现 ssh 仍然可用,并且我可以使用 ssh 做基本上相同的事情,但是,我没有看到 ssh 具有与 ping 相同的超时选项(我们使用了 1 秒超时,这在我们的环境)。我将脚本更改为使用 use ssh (运行 uname),并且该过程将起作用,除了我没有超时选项,当脚本命中已重新配置的计算机时,ssh 挂起很长时间。
是否有办法为 ssh 连接设置一个较短的超时时间,或者找到其他方法在 1-2 秒后终止它?当然,如果有另一种方法可以快速查看是否有任何机器响应主机名,或者更确切地说,如果没有机器响应主机名,我也很想知道。
谢谢
答案1
是的,您可以使用该ConnectTimeout
选项。从man ssh_config
:
ConnectTimeout:指定连接到 SSH 服务器时使用的超时时间(以秒为单位),而不是使用默认的系统 TCP 超时时间。此值仅在目标关闭或确实无法访问时使用,而不是在目标拒绝连接时使用。
因此,对于 5 秒超时:
ssh -o ConnectTimeout=5 host true
请注意,这不会处理您快速连接的情况,但您运行的实际命令很慢,无论是在连接的计算机上还是在您要连接的计算机上。您可能希望通过使用 GNU coreutils 中具有较高超时时间的二进制文件作为备份来处理这种ConnectTimeout
情况timeout
。
例如,这将使耗时超过 5 秒的连接超时,并且如果整个操作中的任何内容耗时超过 7 秒(通过发送 ),也会终止SIGTERM
。 3秒后,如果ssh
仍然没有退出,我们发送SIGKILL
:
timeout 7 -k 3 ssh -o ConnectTimeout=5 host true
你是否也想使用timeout
取决于你想要实现什么,但它至少会让你快速失败。