首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >ClientAliveInterval不会关闭空闲连接。

ClientAliveInterval不会关闭空闲连接。
EN

Stack Overflow用户
提问于 2022-02-18 14:03:10
回答 1查看 983关注 0票数 2

如果空闲时间超过5分钟,我将关闭空闲ssh连接。我尝试过在sshd_config上设置这些值

代码语言:javascript
复制
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-4 ubuntu0.4,OpenSSL 1.1.1f 2020年3月31日

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-02-27 08:17:05

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

这项任务令人吃惊地困难。OpenSSH本身没有在shell命令上设置空闲超时的功能,可能是因为一个很好的原因:杀死“空闲”shell本身并不简单:

  • 有多种方法来定义“懒惰”,例如,没有stdin,没有stdout,没有I/O活动,没有CPU消耗等等。
  • 即使当进程被视为“空闲”时,也很难关闭进程及其可能创建的所有子进程。

考虑到这一点,通常只有很少的解决方案可以杀死空闲的shell会话,这并不奇怪。那些我可以通过(很少)研究发现的,依赖于后台守护进程来检查系统上运行的所有进程(例如,昏倒/懒惰怠速)的空闲状态。

一种可能的解决方案是检查这些解决方案中的任何一种是否可以通过来在特定的shell会话上强制执行空闲超时。

另一种选择是调整OpenSSH源代码以支持您的特定需求。原则上,OpenSSH应该能够轻松地访问控制台I/O活动和会话持续时间,因此评估“空闲”属性可能比较容易。至于“杀死”shell和所有涉及到的子程序,在PID命名空间系统中运行(并杀死)远程shell是一种有效的选择。

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

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/71174746

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档