我在 /etc/ssh/sshd_config 文件中添加了以下两行,service ssh restart
添加后执行了以下操作:
ClientAliveInterval 2 ClientAliveCountMax 5
在我的 /etc/ssh/ssh_config 文件中我有以下内容:
Host *
ServerAliveInterval 0
ServerAliveCountMax 0
因此我预计ssh localhost 'sleep 120; ls -latr'
10 秒后会超时,但事实并非如此。它休眠了 2 分钟,然后运行ls -latr
,我得到了输出。
我甚至尝试使用 PuTTY 的“远程命令”选项:
它也在那里工作。以下是PuTTY日志:
我预计会看到 10 倍[电子邮件保护]SH2_MSG_CHANNEL_REQUEST 数据包,但我看到的却是 59x。实际上,我看到的是两倍,因为无论出于什么原因,服务器似乎一次发送两个,但无论如何。
正如 PuTTY 日志显示,我正在运行 SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.3。
有任何想法吗?
答案1
您引用的保持连接设置(客户端和服务器)不是为了让另一端发送有意义的数据而设置的超时时间。它们只是检查另一端是否仍然处于连接状态,即使它没有有意义的(非空)数据要发送。事实上,它们的设计正是针对连接处于空闲状态但不应断开的情况。
在您的例子中,服务器正在执行保持活动,只要连接持续并且客户端继续响应(它会),服务器就不会断开连接。您只需一方执行保持活动即可保持连接打开;在客户端上关闭它们不会阻止服务器发送它们和客户端响应。
如果您的目标是在命令上设置一个计时器,这样如果命令在一段时间内没有输出,它就会被终止,那么您需要一个不同的解决方案。SSH keepalive 只是防止连接被收割,因为它本来是空闲的。