OpenSSH 的默认空闲超时是多少?

OpenSSH 的默认空闲超时是多少?

我似乎找不到这个简单问题的答案,我需要一些合规性文档。

在默认安装的 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 客户端的配置无关。

有关的:


要转储sshd配置,请以 root 身份使用“扩展测试模式”:

sshd -T

这记录在手册sshd(8)OpenSSH_7.7, LibreSSL 2.7.2(在 OpenBSD 上查看):

-T

扩展测试模式。检查配置文件的有效性,将有效配置输出到stdout然后退出。可选地,可以通过使用一个或多个选项指定连接参数来应用匹配规则-C

此选项于 2008 年添加到sshdOpenSSH 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意味着禁用客户端活动的东西,而不是使空闲会话过期。请参阅错误报告

相关内容