我似乎找不到这个简单问题的答案,我需要一些合规性文档。
在默认安装的 CentOS 6.5 (OpenSSH 5.3p1-94.el6) 上,闲置多长时间后,用户的 SSH 会话将被终止?我相信可以设置以下内容来增加空闲超时,但默认情况下它们被注释掉。
$ grep -i alive /etc/ssh/sshd_config
#TCPKeepAlive yes
#ClientAliveInterval 0
#ClientAliveCountMax 3
另外,是否有命令可以转储当前设置列表sshd
?我没有看到任何东西man sshd
。
答案1
中的注释行sshd_config
通常显示默认值。您问题中的所有行都是这种情况。您可以在sshd_config
联机帮助页。以下是相关片段:
TCPKeepAlive
指定系统是否应向另一端发送 TCP 保持活动消息。如果发送了这些消息,则连接中断或其中一台计算机崩溃将会被正确注意到。但是,这意味着如果路由暂时中断,连接将会中断,有些人会觉得这很烦人。另一方面,如果不发送 TCP 保持活动消息,会话可能会无限期地挂在服务器上,留下“幽灵”用户并消耗服务器资源。
默认为“yes”(发送 TCP keepalive 消息),如果网络出现故障或客户端主机崩溃,服务器会注意到。这可以避免无限挂起的会话。
要禁用 TCP keepalive 消息,该值应设置为“no”。
此选项以前称为
KeepAlive
.
ClientAliveCountMax
设置客户端活动消息的数量(见下文),可以在没有消息的情况下发送SSHD(8)接收从客户端返回的任何消息。如果在发送客户端活动消息时达到此阈值,sshd 将断开客户端连接,终止会话。需要注意的是,客户端活动消息的使用与
TCPKeepAlive
(以下)(多于)。客户端活动消息通过加密通道发送,因此不会被欺骗。 TCP keepalive 选项启用TCPKeepAlive
是可以欺骗的。当客户端或服务器依赖于了解连接何时变为非活动状态时,客户端活动机制非常有价值。默认值为 3。如果
ClientAliveInterval
(见下文)设置为 15,并且ClientAliveCountMax
保留默认值,无响应的 SSH 客户端将在大约 45 秒后断开连接。此选项仅适用于协议版本 2。
ClientAliveInterval
设置超时间隔(以秒为单位),在此之后如果没有从客户端收到数据,SSHD(8)将通过加密通道发送消息来请求客户端的响应。默认为0,表示这些消息不会发送到客户端。此选项仅适用于协议版本 2。
答案2
OpenSSH 不会终止闲置一段时间的 shell 会话。这不是 OpenSSH 所做的事情。终止空闲 shell 会话与 OpenSSH 的配置无关。
您显示的设置与连接断开时的超时相关,与远程主机上的 shell 以及用户正在执行或未执行的操作无关。
远程主机的 shell 可能会在闲置一段时间后终止(或者可能被其他进程终止),但这与服务器上的 SSH 服务和 SSH 客户端的配置无关。
有关的:
- 如何在一定时间后终止交互式 ssh 会话(提到
TMOUT
shell 变量,它可能负责终止空闲bash
shell)。
要转储sshd
配置,请以 root 身份使用“扩展测试模式”:
sshd -T
这记录在手册sshd(8)
OpenSSH_7.7, LibreSSL 2.7.2
(在 OpenBSD 上查看):
-T
扩展测试模式。检查配置文件的有效性,将有效配置输出到stdout然后退出。可选地,可以通过使用一个或多个选项指定连接参数来应用匹配规则
-C
。
此选项于 2008 年添加到sshd
OpenSSH 5.1/5.1p1。
答案3
您可以为客户端或服务器端设置 SSH keepalive:
客户端
文件:/etc/ssh/ssh_config
内容:
Host *
ServerAliveInterval XX
ServerAliveCountMax YY
服务器端
文件:/etc/ssh/sshd_config
内容:
ClientAliveInterval XX
ClientAliveCountMax YY
摘自:http://www.sysadmit.com/2016/02/linux-y-vmware-ssh-evitar-desconexion.html
答案4
SSH 不再有空闲超时,但您可以使用外壳TMOUT
变量反而。对其进行标记readonly
以防止篡改。
SSH 在客户端和服务器上都有保持活动设置,但它们不是空闲超时。它们可用于自动检测并关闭无响应的连接。他们还可以执行与空闲超时相反的操作:定期来回发送虚假流量,以便防火墙不会使空闲连接过期。
在旧版本的 SSH 中,如果ClientAliveCountMax=0
,则会在几秒钟不活动后结束 SSH 会话ClientAliveInterval
,但这并没有记录在案,也不是 OpenSSH 开发人员有意为之。
# Will time out idle sessions, but only if OpenSSH version < 8.2, e.g., CentOS 7
ClientAliveInterval 60
ClientAliveCountMax 0
这被视为 sshd 中的错误,并且在 OpenSSH 8.2 中删除。现在ClientAliveCountMax=0
意味着禁用客户端活动的东西,而不是使空闲会话过期。请参阅错误报告。