为什么我的 ssh 超时会随着网络位置而变化?

为什么我的 ssh 超时会随着网络位置而变化?

当我从家里通过 ssh 连接到我们办公室的一台服务器(运行 Fedora 10)时,我的会话在活动时间较短(约 5 分钟)后超时。我尝试TcpKeepAlive在客户端使用,但无效。

我不明白的是,如果我在公司局域网的办公室,我可以让会话一整天不活动而不会超时,所以这种行为似乎取决于我的位置。

你知道为什么会发生这种情况吗?当我不在 LAN 上时,如何防止超时?如果有帮助的话,我正在使用 Mac OSX 上的终端客户端。

更新- Dave Drager 建议使用ServerAliveInterval设置为非零,这TcpKeepAlive=no对我有用。关于其他一些答案,ClientAliveMac OSX SSH 客户端不接受 ... 设置。

答案1

关于这个问题有一篇很好的文章这里

他们建议:

ssh -o TCPKeepAlive=yes

或者:

ssh -o TCPKeepAlive=no -o ServerAliveInterval=15

但是,我在工作时确实遇到了一个问题,就是会话会断开,而在家里却没问题。我认为我的防火墙 (SonicWall) 可能与 TCPKeepAlive 不兼容,可能是因为 NAT。

幸运的是,我的 SSH 客户端 SecureCRT 有一个“NO-OP”协议选项,我认为它基本上会向服务器发送一个不执行任何操作的命令。通过手动启用此功能,我可以保持连接。不确定 MacOSX 终端客户端有什么类似的功能。有一个写上去关于如何在命令行上实现“NO-OP”。

最后,您可能希望使用 Wireshark 或其他嗅探器来观察您的实际 TCP 连接,以了解其情况。这将是了解它为何偶尔仍会断开连接的最后方法。

答案2

这可能是因为当您从家里连接时,您会经过防火墙,该防火墙会在一小段时间后关闭 TCP 会话。但 TcpKeepAlive 应该可以避免这种情况。您是在客户端还是在服务器端启用了 TcpKeepAlive?

答案3

我在使用 Comcast 连接时总是遇到这种情况。问题在于您的 SSH 客户端的保持活动间隔对于网络路径中配置的超时时间来说太长。如果您使用的是 Linux,则可以将和ServerAliveInterval值修改ServerAliveCounter为低于其默认值。此值以秒为单位设置。系统范围的配置文件(通常)位于 中/etc/ssh/ssh_config。设置这两个 ANDTcpKeepAlive应该有助于保持连接畅通。

答案4

您还可以将其他人建议的设置添加为文件中的默认设置~/.ssh/config,这样就不必在ssh每次启动连接时都传递它们:

nano ~/.ssh/config并添加:

TCPKeepAlive=no
ServerAliveInterval=15

相关内容