我与一台机器建立了 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
答案2
此外Mike Pennington 的回答,我也想让你知道ServerAliveCountMax
。
- 将
ServerAliveInterval
每隔 x 秒发送一次 keepalive(默认为0,如果未设置其他内容,则会禁用此功能)。 ServerAliveCountMax
如果没有收到响应,则将执行此操作。默认ServerAliveCountMax
值为3(看手册页 ssh_config)。
例如:如果您设置ServerAliveInterval
为60并保持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
答案4
永远不会太迟...
但是如果您只使用非 GUI,那么top
可能会有更好的选择crontab
。
每 5 分钟创建一个 bash 脚本mkdir
并执行该操作rm
或者
发送/dev/null
到/dev/null
. 哈哈。