Linux的SSH超时

经过X分钟的不活动,我一直在努力与一对夫妇系统超时,不知道如何解决这个问题。

我在我的办公室有一个CentOS盒子。 连接到SSH不能触摸它2小时,它仍然活着,当我运行的东西。

然而,连接到家里的同一个盒子,有时几秒钟后有时会超时。

我会认为这是我的互联网连接,但是如果我正在使用这个盒子,它将保持连接。

但是,如果我停止input谷歌的东西,它会显示一个断开连接的消息,我不得不重新连接。

任何我可以检查看看发生了什么?

你应该考虑的第一件事是设置ServerAliveInterval。 这应该在您的工作站上设置。

在Linux或OSX客户端上,您可以在工作站上的〜/ .ssh / config下为您的用户创build一个configuration文件。 添加以下指令。 在我的情况下,我希望它影响所有的主机,所以我把它放在主机*。

Host * ServerAliveInterval 60 

这将每隔60秒发送一次noop指令以保持连接打开。 你可能想调整价值来满足你的需求。

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

 grep TCPKeepAlive /etc/ssh/sshd_config TCPKeepAlive yes 

如果您在Windows上,则需要参考客户端的文档。

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

但是,如果有任何有状态的中间件(NAT,防火墙等),这些中间件可能会超时闲置连接。 这样做的结果是,即使连接两端都处于活动状态,两个端点之间也不能再进行通信,因为中间设备拒绝转发任何数据包,直到SSH客户端打开一个新的连接。

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

既然你指出超时有时似乎只有几秒钟,这可能不足以解决你的问题。 超负荷或错误configuration的CGN可能导致非常低的超时时间。 您需要检查通信path各个点的stream量,以确定CGN是否对这些故障负责。

如果事实certificate,这些故障是由您的ISP做一些愚蠢的事情造成的,例如通过不共享连接状态的多个CGN上的负载平衡连接,则无法通过简单地调整SSHconfiguration来解决问题。

如果你碰巧遇到一个不可靠CGN的ISP,他们拒绝修复,我所知道的唯一剩下的select是将客户端和服务器都升级到内核版本,并且使用MPTCP支持,或者使用devise为容忍自发的隧道解决schemeNAT上端口映射的改变。