SSH 连接一直挂在终端

Max*_*eng 1 ssh terminal

这是一个困扰我一年的问题!!!

我需要经常在办公室和家里通过 ssh 连接到我的远程服务器。通常,它在办公室工作得很好。但是在家里时,ssh 连接会很快断开(或挂断)。有时当我回来两五分钟时,ssh 会话已经死了Ctrl+cCtrl+z并且Ctrl+d没有任何效果。

Max*_*eng 7

这里有两个问题:

  1. SSH 会话挂断,不容易关闭。

原因:普通密钥通过 ssh 会话转发,因此它们现在不起作用。

解决方案:我们可以使用转义键序列( Enter ~ .) 来关闭它。在Enter ~ ?随后的挂机终端中,它会向您显示支持的转义序列列表,如下所示:

Supported escape sequences:
 ~.   - terminate connection (and any multiplexed sessions)
 ~B   - send a BREAK to the remote system
 ~C   - open a command line
 ~R   - request rekey
 ~V/v - decrease/increase verbosity (LogLevel)
 ~^Z  - suspend ssh
 ~#   - list forwarded connections
 ~&   - background ssh (when waiting for connections to terminate)
 ~?   - this message
 ~~   - send the escape character by typing it twice
(Note that escapes are only recognized immediately after newline.)
Run Code Online (Sandbox Code Playgroud)
  1. SSH 会话在短时间内挂断。

原因:这可能取决于您的网络类型和路由器。企业路由器比家用路由器更强大,可以保持长期连接。在家里,我们可能只有一个来自 ISP 的IP 地址和许多设备。通常,为了使用一个外部IP地址处理多个设备,家庭路由器会创建一个NAT网络(WIFI)并为每个设备分配一个内部IP地址。当您的设备从 Internet 发送请求并接收响应时,家庭路由器需要维护一个connection mapping table以使所有连接正常工作。但是这个connection mapping table很小,当它没有更多的容量时,它会丢弃一些认为已经死的连接让新的连接加入。

解决方案:在 SSH 版本 2 中,有一个“无操作”消息类型(NOOP),可用于保持 ssh 会话的活动。在~/.ssh/config默认情况下位于的 ssh 配置中添加以下配置。

Host *
  ServerAliveInterval 300
Run Code Online (Sandbox Code Playgroud)

数量300可根据您的路由器进行调整。

希望这可以帮助其他人。

有没有人有其他建议?如果我的理解有误,请纠正我。