为什么一段时间后我的ssh会话会冻结?[关闭]


10

抱歉,如果这不是问这个问题的正确地方。

我经常需要SSH到其他服务器。现在,从我的家用计算机(Linux造币厂)上,当我通过ssh连接时,经过一段时间不活动后,我的ssh shell冻结了,无法将其恢复。我唯一能做的就是'〜。',这至少使我的启动外壳恢复了原状。

当我从其他位置登录到相同的服务器时,没有问题。我的ISP可能有问题吗?如何对此进行进一步调查?

确实很烦人,因为冻结后我必须重新建立ssh连接,导航回原处并恢复工作。谢谢


您有一个静态IP地址吗?如果不是,则可能是您的ISP在会话中为您提供了其他IP地址-请检查您的日志并查看。
user9517 2014年

我没有静态IP地址。将检查
coccolithophore

Answers:


20

一段时间不活动后,您的NAT丢弃了TCP套接字。

您的ssh客户端可以选择将定期noop发送到服务器,从而消除了此问题。为此,请将其添加到您的~/.ssh/config

Host *
  ServerAliveInterval 60

或者,将您的NAT重新配置为不使其状态表中的项目立即过期。


除了上述内容之外,您还应该在会话中使用终端多路复用器-类似于GNU Screen或tmux。无论使用哪种方法,都可以在断开连接的情况下恢复会话。


NAT或路径中任何严重错误的防火墙都喜欢丢弃空闲的TCP会话。除了缺乏保持状态的内存外,没有理由丢弃空闲的TCP会话,但是如果您正确调整大小和配置设备,这种情况很少发生。知道您的提供者/管理员是否称职(这是个好主意)是一个很好的功能。
zerodeux

0

就我而言,问题在于MTU大小过大。如果使用NAT,则可以在路由器上更改MTU,但我可以在服务器上更改MTU:

sudo /sbin/ifconfig eth0 mtu 1036
sudo /etc/init.d/networking restart

在Windows上,您还可以增加以下键:

[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters]
"TcpMaxDataRetransmissions"=dword:00000010
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.