unix - ssh中ConnectTimeout和ServerAliveInterval有什么区别

标签 unix ssh

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

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

我目前的ssh方式

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

一切都很顺利,直到有一天我在我的一台服务器上发现了一个陈旧的 ssh 连接。已经上线超过3天了。

所以现在我想我可能错过了一些东西,我尝试用谷歌搜索,发现有一个叫做ServerAliveInterval的东西......这可以解决我的问题吗?它与 ConnectTimeOut 有何不同?

最佳答案

“ServerAliveInterval”指定 SSH 服务器和客户端之间的定期轮询时间。其目的有两个:

(1) 关闭空闲 ssh session ,其中任一 [a] 一侧或另一侧严重崩溃(即:机器故障/断电) [b] 一方或另一方更改 IP 地址

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

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

关于unix - ssh中ConnectTimeout和ServerAliveInterval有什么区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29210700/

相关文章:

windows - 是否有任何资源可以成为 Cygwin "power user"?

c - fork() 中的写时复制如何工作?

c# - 从 C# 远程调用 unix shell 脚本

python - 使用subprocess.popen SSH,无法输入密码

python - 两台电脑之间通过ssh传输文件

java - 使用 Java SSH API 时 sqlplus 缺少输出

php - cURL 通过 SSH 隧道连接到远程服务器

Bash:如何从参数设置变量,并使用默认值

unix - bsd 内核用户空间事件 kqueue

shell - 远程创建用户名和设置密码