Linux SSH 超时

Ant*_*ito 10 centos

在 X 分钟不活动后,我一直在为几个系统超时而苦苦挣扎,不知道如何解决它。

我的办公室有一个 CentOS 机器。连接到 SSH 后 2 小时无法触摸它,并且当我运行某些东西时它仍然存在。

但是连接到家里的同一个盒子,它有时会在几秒钟后超时,有时在几分钟后。

我认为这是我的互联网连接,但是如果我积极使用该盒子,它将保持连接状态。

但是,如果我停止向 google 输入内容,它会显示一条断开连接的消息,我必须重新连接。

有什么我可以检查的,看看发生了什么?

dig*_*ons 14

您应该研究的第一件事是设置 ServerAliveInterval。这应该在您的工作站上设置。

在 Linux 或 OSX 客户端上,您可以在工作站上的 ~/.ssh/config 下为您的用户创建配置文件。添加以下指令。在我的情况下,我希望它影响所有主机,所以我将它放在 Host * 下。

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

这将每 60 秒发送一次 noop 指令以保持连接打开。您可能需要调整该值以满足您的需要。

在服务器端确保 TCPKeepAlive 设置为 yes。

grep TCPKeepAlive /etc/ssh/sshd_config
TCPKeepAlive yes
Run Code Online (Sandbox Code Playgroud)

如果您使用的是 Windows,则需要参考客户端的文档。


kas*_*erd 11

Linux 不会使空闲的 SSH 连接超时。您可以无限期地保持 SSH 连接打开,只要端点没有重新启动或获得新的 IP 地址,在长时间空闲后访问它时,连接仍然可以工作。

但是,如果有任何有状态的中间件(NAT、防火墙等),它们可能会使空闲连接超时。这样做的结果是,即使连接在两端都处于活动状态,两个端点也无法再通信,因为中间盒拒绝转发任何数据包,直到 SSH 客户端打开新连接。

如果你知道了中间件的超时时间,可以通过配置解决此问题ClientAliveInterval/etc/ssh/sshd_config服务器上或ServerAliveInterval~/.ssh/config客户端上。为了最佳检测断开的连接,建议启用这两个设置。当任一端点重新启动或获得新 IP 地址时,这也将检测断开的连接。

由于您指出超时有时看起来低至几秒钟,因此这可能不足以解决您的问题。CGN 过载或配置错误可能会导致非常低的明显超时。您需要检查通信路径各个点的流量,以确定 CGN 是否对故障负责。

如果结果证明失败是由您的 ISP 做了一些愚蠢的事情引起的,例如在多个不共享连接状态的 CGN 上进行负载平衡连接,则您无法通过简单地调整 SSH 配置来自行解决问题。

如果您碰巧遇到一个 ISP 的 CGN 不可靠而他们拒绝修复,我所知道的唯一剩下的选择是要么将客户端和服务器升级到支持 MPTCP 的内核版本,要么使用旨在容忍自发的隧道解决方案NAT 上端口映射的变化。