如何防止 SSH 在闲置一段时间后断开连接

如何防止 SSH 在闲置一段时间后断开连接

我与一台机器建立了 ssh 连接,该机器在 30 分钟内没有用户输入后会断开连接。但是,如果我启动类似 的程序top,连接仍然有效。由于这是一台客户端机器,我无法重新配置该机器的 SSH 服务器。因此,我正在寻找一种自动检测空闲状态并启动类似 的程序的方法top。这有点像 Bash 的“屏幕保护程序”。

我知道我可以用 来做到这一点screen,但不幸的screen是 没有安装,而且我无法安装软件。所以我需要使用 Bash 提供的功能。

说清楚一点:我正在寻找一种解决方案,登录后启动一次,然后我想使用该终端,离开,两小时后回来继续工作,在离开之前不输入任何内容。另外,我并不希望建立隧道(为此我推荐这个很棒的工具穿梭巴士

有任何想法吗?

答案1

为了说清楚:我正在寻找一种解决方案,登录后启动一次,然后我想使用该终端,走开,两小时后回来继续工作,在离开之前无需输入任何内容。

问题在于,有一些东西(通常是防火墙或负载平衡器)会丢弃空闲会话。如果您配置会话保持活动,则保持活动将阻止网络设备将会话视为空闲。

Linux / Unix / Cygwin OpenSSH 修复
最简单的修复方法是启用 ssh 客户端 keepalive;此示例将每 60 秒发送一次 ssh keepalive:

ssh -o "ServerAliveInterval 60" <SERVER_ADDRESS>

如果您想在所有会话中启用此功能,请将其放入您的/etc/ssh/ssh_config或中~/.ssh/config

ServerAliveInterval 60

有关详细信息,请参阅ssh_config手册页

Putty修复

将其保存到您的 PuTTY“默认设置”...

  • 点击连接
  • 在“保持连接间隔秒数”中输入 60

putty_屏幕截图

答案2

此外Mike Pennington 的回答,我也想让你知道ServerAliveCountMax

  • ServerAliveInterval每隔 x 秒发送一次 keepalive(默认为0,如果未设置其他内容,则会禁用此功能)。
  • ServerAliveCountMax如果没有收到响应,则将执行此操作。默认ServerAliveCountMax值为3(看手册页 ssh_config)。

例如:如果您设置ServerAliveInterval60并保持ServerAliveCountMax原样,这意味着 keepalive 将只等待3 * 60 = 180 seconds = 3退出前几分钟。

为了将尝试保持连接的时间增加到例如 2 小时,您可以执行以下操作:

根据命令:

因此你应该考虑设置

ssh -o "ServerAliveInterval 60" -o "ServerAliveCountMax 120" <SERVER_ADDRESS>

执着的:

要使其持久写入/etc/ssh/ssh_config(将应用于整个系统)或~/.ssh/config(将仅适用于用户):

ServerAliveInterval 60
ServerAliveCountMax 120

#笔记

作为dislick 正确指出,这可能不是您想要的,具体取决于您的情况:

  • 如果您想在服务器不再响应时快速终止会话,您应该选择一个较低的值ServerAliveCountMax
  • 如果您更有兴趣保持已经建立的连接(例如,您乘坐火车并且延迟较高),则应该选择更高的值以ServerAliveCountMax允许ssh继续尝试重新建立连接。

也可以看看:

答案3

我正在使用 Mobaxterm,也遇到了这个问题。Mobaxterm 还附带一个选项,可以在客户端空闲时保持客户端活动。转到Settings -> Configuration -> SSH。有标题为 的部分SSH settings,选中选项SSH keepalive。然后问题应该会消失。

在此处输入图片描述

答案4

永远不会太迟...

但是如果您只使用非 GUI,那么top可能会有更好的选择crontab

每 5 分钟创建一个 bash 脚本mkdir并执行该操作rm

或者

发送/dev/null/dev/null. 哈哈。

相关内容