我想要完成的只是简单地终止不活动的SSH会话。仅仅因为用户登录并不意味着用户正在做某事。我需要SSH守护进程在X秒的不活动之后注销用户。
和CentOS不自动注销不活动的SSH会话。至少不能在合理的时间内。合理地说,我指的是不到10分钟。
在发布这个问题之前,我已经搜索和阅读过serverfault.com类似的问题,但是我找不到任何有正确答案的帖子。
在阅读了一系列文章(包括Debian的手册页)之后,https://manpages.debian.org/stretch/openssh-server/sshd_config.5.en.html在/etc/ ssh /sshd_config文件中实现了与ssh不活动相关的两个选项,如下所示:
ClientAliveInterval 300
ClientAliveCountMax 1超时值是通过将ClientAliveInterval与ClientAliveCountMax相乘来计算的。
timeout interval = ClientAliveInterval * ClientAliveCountMax这个设置在CentOS上工作得很好,因为我得到了“由远程主机关闭到x.x的连接”。但它不适用于Debian。
我是不是曲解了文件?有人能解释我做错了什么吗?
谢谢。
发布于 2021-10-15 18:22:25
不确定Debian超时不工作的原因,但是还有其他方法强制注销。
因此,首先想到的是添加到profiles.d (或sudoers)配置中,以自动注销用户(将超时扩展到控制台和sudo su命令)。
启用步骤:https://ostechnix.com/auto-logout-inactive-users-period-time-linux/
发布于 2023-01-18 16:19:01
根据我在UbuntuServer22.04中测试的其他答案,在这里添加一些澄清性的评论。使用sshd ClientAliveInterval和ClientAliveCountMax机制,至少在我尝试使用不同的Ubuntu系统时,ssh客户机会静默地响应空客户机活动消息。所以,如果你让那个客户保持活跃,它就永远不会被杀死。但是,您可以在工作中看到它,如果您挂起客户机:~^Z,也就是随Control倾斜,并等待您乘以的ClientAliveInterval * ClientAliveCountMax秒数,连接将被关闭,当您从挂起恢复客户机时(例如,fg),您可以观察到。如果您不知道ssh中的tilde命令,请键入~?去寻求帮助。
因此,我认为ClientAlive机制有利于捕获挂起、停止或暂停的、无响应的机器、中断的网络和其他重大悲剧的ssh客户端。
我已经测试了TMOUT (export readonly TMOUT=7200),并发现它在bash中如预期的那样工作。但是,如果用户选择了不同的shell,我不确定它是否生效。也许每个shell都有自己的机制,或者它们都使用相同的机制(但很少这么容易完成!)注意,ShellCheck抱怨“导出只读”,并希望“声明-rx",但我认为/etc/profile.d中的脚本不是在bash中运行的,而是在/bin/sh中运行的,在那里”声明“不可用。
https://serverfault.com/questions/1080684
复制相似问题