如果 SSH 闲置了一段时间,如何防止它断开连接

Isa*_*aac 94 linux ssh bash

我有一个到一台机器的 ssh 连接,该连接在 30 分钟没有用户输入后被该机器断开。但是,如果我开始类似的操作top,连接将保持活动状态。由于这是客户端的机器,我无法重新配置该机器的 SSH 服务器。所以我正在寻找一种方法来自动检测空闲并启动类似top. 一种 Bash 的“屏幕保护程序”。

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

明确地说:我正在寻找一种解决方案,我在登录后启动一次,然后我想使用该终端,走开,两小时后回来继续工作,在走开之前不输入任何内容。此外,我不希望隧道的东西(为此我推荐伟大的工具sshuttle

有任何想法吗?

Thi*_*his 121

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

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

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

ssh -o "ServerAliveInterval 60" <SERVER_ADDRESS>
Run Code Online (Sandbox Code Playgroud)

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

ServerAliveInterval 60
Run Code Online (Sandbox Code Playgroud)

有关更多信息,请参阅ssh_config联机帮助页

腻子修复

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

  • 点击连接
  • 在“Keepalives 之间的秒数”中输入 60

putty_screenshot


Mur*_*mel 42

除了Mike Pennigton 的回答,我也想让你知道ServerAliveCountMax

  • ServerAliveInterval会发送一个保活每x秒(默认为0,如果没有设置到别的东西即禁用此功能)。
  • ServerAliveCountMax如果没有收到响应,这将被执行多次。的缺省值ServerAliveCountMax3(见手册页ssh_config中)。

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

要将其增加到例如尝试保持连接活动的 2 小时,您可以执行以下操作:

每个命令:

因此你应该考虑设置

ssh -o "ServerAliveInterval 60" -o "ServerAliveCountMax 120" <SERVER_ADDRESS>
Run Code Online (Sandbox Code Playgroud)

执着的:

要使其持久写入/etc/ssh/ssh_config(将在系统范围内应用)或~/.ssh/config(将仅应用于用户):

ServerAliveInterval 60
ServerAliveCountMax 120
Run Code Online (Sandbox Code Playgroud)

笔记

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

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

也可以看看:

  • 我很抱歉,但这是错误的。`ServerAliveCountMax` 指定了可以发送的服务器活动消息的数量,*无需*从服务器接收任何消息。如果您希望 `ssh` 在它冻结后退出(以便您可以重新启动它),您实际上应该将 `ServerAliveCountMax` 设置为 *low* 数字。请参阅链接的 [手册页](https://linux.die.net/man/5/ssh_config) OP。 (4认同)

jdh*_*hao 10

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

在此处输入图片说明

  • “SSH keepalive”在免费版中工作吗...即使检查了这个选项,我的会话也断开了 (2认同)