如果这里不适合提出这个问题,我深表歉意。
我经常需要 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