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