为什么我的 ssh 会话在一段时间后会冻结?

为什么我的 ssh 会话在一段时间后会冻结?

如果这里不适合提出这个问题,我深表歉意。

我经常需要 ssh 连接到不同的服务器。现在,从我的家用机器 (linux mint),当我通过 ssh 连接时,经过一段时间不活动后,我的 ssh shell 会冻结,并且无法恢复。我唯一能做的就是 '~.",这至少可以让我恢复我的启动 shell。

当我从其他位置登录到同一台服务器时,没有任何问题。这可能是我的 ISP 的问题吗?我该如何进一步调查这个问题?

这真的很烦人,因为我必须在冻结后重新建立 ssh 连接,导航回我之前的位置并恢复工作。谢谢

答案1

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

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

Host *
  ServerAliveInterval 60

或者,重新配置您的 NAT,使其状态表中的项目不会像现在这样快速过期。


除上述内容外,您还应该使用终端多路复用器进行会话 - 比如 GNU Screen 或 tmux。使用其中任何一种,您都可以在断开连接时恢复会话。

答案2

就我而言,问题出在 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

相关内容