ssh中的ConnectTimeout和ServerAliveInterval有什么区别

Whats the difference between ConnectTimeout and ServerAliveInterval in ssh

我正在几台远程服务器上执行 ssh,有些服务器没有响应,有些服务器可能已关闭。

为了排除这种情况,我在 ssh 命令中使用了 ConnectTimeout。正如我配置的那样,它正在超时。

我目前的做法ssh

ssh -o LogLevel=Error -oConnectTimeout=5 -oBatchMode=yes -l becomeaccount servername './command.sh'

一切都很顺利,直到有一天我在我的一台服务器上发现了一个失效的 ssh 连接。开了三天多了。

所以现在我想我可能错过了什么,我尝试 google 它并发现有一个叫做 ServerAliveInterval 的东西...这能解决我的问题吗?它与 ConnectTimeOut 有何不同?

"ServerAliveInterval"指定SSH服务器和客户端之间的周期性轮询时间。意图是双重的:

(1) 关闭空闲的 ssh 会话 [a] 一侧或另一侧严重崩溃(即:机器 failure/poweroff) [b] 一方或另一方更改 IP 地址

(2) 通过 NAT 维护空闲 ssh 会话,这会拆除(或终止)空闲 TCP 会话

ServerAliveInterval 影响 "ssh" 客户端。 "sshd" 服务器有一个相应的参数。 (也有一个 TCPKeepAlive 选项。)如果您在远程服务器上看到孤立的 sshd 会话,您应该考虑在远程服务器的 sshd_config 中进行适当的更改。如果您无法在远程服务器的 sshd_config 中实施更改,但仍需要停止空闲登录,请检查您的 shell 是否有空闲超时("bash" 有。)