ClientAliveInterval未关闭空闲连接



如果空闲的ssh连接超过5分钟,我的任务是关闭它们。我已尝试在sshd_config上设置这些值

TCPKeepAlive no
ClientAliveInterval 300
ClientAliveCountMax 0

但似乎什么都不起作用——闲置仍然有效,即使在闲置5分钟后也不会丢失。

然后我发现了这个https://bbs.archlinux.org/viewtopic.php?id=254707他们说

这些不是针对用户空闲的情况,它们是-就像手册页一样摘录说明-针对无响应的SSH客户端。客户将如果客户端程序已冻结或连接已已损坏。客户端不应该仅仅因为人类用户已经离开了键盘:ssh客户端将仍然接收从服务器发送的分组。

我甚至不能使用TMOUT,因为有些ssh客户端脚本不运行bash程序。

如何做到这一点?

Openssh版本OpenSSH_8.2p1 Ubuntu-4ubuntu0.4,OpenSSL 1.1.1f 2020年3月31日

如果空闲的ssh连接超过5分钟,则关闭

这项任务难度惊人OpenSSH本身没有在shell命令上设置空闲超时的功能,这可能有一个很好的原因:killing"空闲";shell本身并不平凡:

  • 有多种方法可以定义";空闲,例如,没有stdin、没有stdout、没有任何I/O活动、没有CPU消耗等
  • 即使当一个过程被认为是";"空闲";,很难杀死进程及其所有可能已创建的子进程

考虑到这一点,通常只有很少的解决方案可以杀死空闲的shell会话也就不足为奇了。我可以通过(很少(研究找到的那些依赖于后台守护程序,这些守护程序检查系统上运行的所有进程的空闲状态(例如,doinkd/idled、idleout(。

一种可能的解决方案是检查这些解决方案中是否有任何一个可以进行调整,以便在特定的shell会话上强制执行空闲超时。

另一种选择是调整OpenSSH源代码以支持您的特定需求。原则上,OpenSSH应该能够容易地访问控制台I/O活动和会话持续时间,因此评估;空闲";财产可能相对容易。至于";杀死";在Linux系统上,在PID命名空间中运行(并杀死(远程shell是一个有效的选项。

这两个选项都相对复杂,因此在进一步研究之前,我会进一步检查是否有现有的解决方案来强制shell会话上的空闲超时。在OpenSSH下使用它们将非常简单。

相关内容

  • 没有找到相关文章

最新更新