我一直在 StackOverflow 上查看,似乎 SSH 连接会在一段时间内(2 小时?)看不到任何数据包时断开连接。另外,我查看了我的/etc/ssh/ssh_config
文件,似乎没有任何内容可以保持我当前的连接。
我的问题是:即使 48 小时后,为什么 SSH 连接仍然存在? (我的计算机已关闭,但我通过 SSH 访问的服务器可能仍然在线)
答案1
理论上,SSH 连接可以无限期地持续。它可以由任何一方在 SSH 层(使用FIN
数据包)显式终止,也可以在 TCP 层(使用数据RST
包)异常终止。
RST
如果一方发送数据包但在合理的时间内没有获得 TCP 确认,则可能会发生这种情况。这通常是因为对方已经不在了。如果中间有 NAT 或防火墙停止跟踪连接(通常是由于缺乏活动),也可能会发生这种情况,从而导致两方无法再进行通信。更阴险的是,邪恶 ISP 的路由器可能会将RST
数据包注入连接,但此类措施通常只针对 ISP 认为令人反感的内容,例如 BitTorrent。
保持活动可以通过提醒 NAT 或防火墙维持连接状态来帮助保持连接活动。然而,保持活动状态也可能会造成损害,因为它会使网络连接中的短暂故障更有可能被注意到。
答案2
也许您必须在 sshd_config 中设置 ClientAliveInterval。