确保 SSH 空闲连接超时

确保 SSH 空闲连接超时

响应服务器端ClientAliveInterval和的限制,客户端可以通过适当设置和值ClientAliveCountMax来选择发送空数据包。ServerAliveIntervalServerAliveCountMax

我如何才能确保只有交换了合法数据(即非空数据包)时会话才被视为有效?本质上,我如何让 SSH 服务器忽略来自客户端的所有空数据包?

如果客户端特意使用 top 或虚拟 shell 脚本编写循环来保持会话处于活动状态,那么这是一个不同的问题,因为这是保持会话打开的主动行为。我试图阻止当用户锁定屏幕或长时间离开时会话保持打开状态。

谢谢。

编辑:为了进一步说明,我必须补充一点,这里讨论的服务器是 SSH 跳转服务器,用户将不被允许在其上获取 TTY。因此,仅仅依靠 sshd_config 是不够的。

答案1

由于您感兴趣的是终端活动(缺乏),因此您应该在这个级别检查是否存在闲置情况。

幸运的是,bash 有一个内置的空闲函数,如果你将变量设置TMOUT为秒数,并且过了该秒数后 shell 仍未执行任何操作,bash 就会退出。当 shell 在前台有命令时,则不会产生任何影响。

为了防止用户覆盖此设置,您可以将变量设为只读。

将所有这些放在一起,您将创建一个/etc/profile.d/tmout.sh包含以下内容的文件:

TMOUT=900
readonly TMOUT
export TMOUT

如果 shell 空闲 15 分钟(900 秒),这将导致 shell 退出。将其设为只读意味着在同一 shell 会话中不能再次更改该变量。

相关内容