3 个回答

原因

这个事情比较繁琐,但不复杂:

第一:ssh使用tcp长连接进行通信,这个长连接是没有保活心跳的,所以当连接建立但是双方都没什么事的时候(你不敲命令,服务器也不向你发什么更新数据),中间是没有数据包的。

第二:从你的PC机,到你的公网出口,到互联网上,到阿里云防火墙,到你的阿里云主机,这一长过程可能会经过非常多个NAT设备和防火墙设备。以SNAT设备为例(常见的是家用路由器、公司路由器或防火墙,运营商CGN),这些设备会为你的这次TCP连接维持一个NAT会话(关于NAT的相关资料建议自学),如果这个会话在一定时间内有通信的话,就会刷新生存时间。如果这次会话双方确认断开连接,就会释放这个会话(这条TCP连接也不再通了)。然而这就有一个特殊情况,如果两个建立连接的双方都断网/死机了怎么办?这个会话应该也没用了,所以很多NAT设备会在这里设置一个最长生存时间,这个时间之内如果没有数据包通信,那就断开这个NAT会话。这就是你说的一段时间不操作就失去响应

第三:除了NAT设备,链路上很多防火墙设备都会有类似限制。很多公司的公司防火墙都有这种设置,无数据的NAT会话存活时间也都是自行设定的。

解决办法

一个最简单的解决办法,就是保持有数据就行了。

在闲着没事的时候打个top -c监控系统。

小提示

如果使用SecureCRT等工具,可以克隆当前会话,这个克隆的会话使用的是与被克隆会话相同的TCP连接,在克隆会话中top -c

你需要 Xshell.

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题
宣传栏