我有一台运行 Ubuntu 11.04 的旧 P4 系统。该机器通过 USB 无线适配器连接到互联网,并且安装了 openssh,因此我可以从网络中的其他计算机连接到它。我的问题是,通过 ssh 连接到机器几分钟后,ssh 连接冻结,我无法在终端上执行任何操作。我知道服务器仍连接到无线网络,但不知何故它没有响应……除非我在服务器机器上从互联网请求网页或其他任何东西。当 ssh 连接冻结时,我使用服务器机器通过 wget 请求网页,它会等待一段时间,然后下载页面,然后之前冻结的 ssh 连接再次开始工作。
作为临时解决方案,我在服务器机器上执行一个脚本,该脚本定期请求网页(通过 wget)。到目前为止,这个解决方案似乎运行良好,但我不明白为什么机器会这样。有什么想法吗?
答案1
您可能需要将 SSH Keepalive 设置为一分钟以内的时间(在客户端)。
服务器存活间隔
设置超时间隔(以秒为单位),如果在此间隔之后未从服务器收到任何数据,ssh(1) 将通过加密通道发送一条消息以请求服务器响应。
默认值为 0,表示这些消息将不会发送到服务器,如果设置了 BatchMode 选项,则为 300。
此选项仅适用于协议版本 2。ProtocolKeepAlives
是此选项的 Debian 特定兼容性别名。
您需要保持连接处于活动状态,这表明您需要这样做。
为了更好地理解,请查看OpenSSH 常见问题解答,
特别,我的 ssh 连接在 N 分钟不活动后冻结或断开。
这通常是由于数据包过滤器或 NAT 设备因不活动而导致 TCP 连接超时所致。您可以启用客户端存活间隔在服务器的sshd_配置或启用服务器存活间隔在客户的ssh_配置(后者在 OpenSSH 3.8 及更新版本中可用)。
启用任一选项并将间隔设置为小于会话超时所需时间,将确保连接在设备的连接表中保持“新鲜”。
您可能还会对以下内容感兴趣TCP保持连接设置。
(我并不是建议你改变它;只是建议你也读一下)