我通过 SSH 从 Windows 10 上运行的 PuTTY 连接到 Rocky Linux 8 上的 OpenSSH 服务器。我使用的是Bash shell。这些会话在一段时间不活动后关闭。我没有测量超时,但它似乎是几个小时的数量级。我试图了解这些会话是如何关闭的。我将在下面解释我已排除的潜在原因。
sshd_config ClientAliveInterval
/etc/ssh/sshd_config已ClientAliveInterval
设置为0。
Bash 环境变量 TMOUT
我已经TMOUT
在整个文件系统的所有常规文件中进行了搜索。此环境变量未在任何地方设置。
网络基础设施
我突然想到,也许我的客户端和服务器之间的防火墙可能正在监视连接并主动关闭(也许通过 TCP FIN)那些已经空闲一段时间的连接。我已经排除了这种可能性,注意到从同一 Windows 主机到其他 Linux 主机(不是 Rocky 8)的会话不会关闭。这些其他主机与有问题的 Rocky 8 主机位于同一防火墙后面,并且也具有ClientAliveInterval
和TMOUT
设置如上所述。
请求帮助
由于不活动,还有哪些其他机制可能会关闭会话?
先感谢您。
这几乎肯定会发生,因为连接处于空闲状态并且 TCP 堆栈正在重置空闲连接。可能是其他 Linux 发行版对这些值的设置不同,或者使用具有不同设置的不同内核版本,这就是为什么您只看到 Rocky Linux 8 存在问题的原因。
这里的解决方案是设置
ClientAliveInterval
为非零值。例如,30 将是一个很好的值。虽然这似乎违反直觉,但这会导致数据在其他空闲通道上发送,从而阻止操作系统关闭连接。现在,如果连接由于某种原因断开,将比以前更快地检测到,但无论如何您都会断开连接,并且无法避免迟早会检测到这种情况。