设置 SSH 空闲超时 Ubuntu 20.04

设置 SSH 空闲超时 Ubuntu 20.04

我想传入ssh-sessions 用于在安全关键服务器不活动时自动断开连接。

我已设置以下设置

TCPKeepAlive no
ClientAliveInterval  30
ClientAliveCountMax 0

我希望 sshd 不会发送 KeepAlive-Packages,因为TCPKeepAliveClientAliveCountMax- 并且我的会话在 30 秒后超时。除此之外,我认为TCPKeepAlive可以保留其默认值,即yes

我已经检查过类似的现有会话:

root@<server>:/etc/apache2# w
 06:53:51 up 2 days, 21:25,  2 users,  load average: 0,00, 0,00, 0,00
USER     TTY      FROM             LOGIN@   IDLE   JCPU   PCPU WHAT
_____-ad pts/0    ____________      Do11    6.00s  0.99s  0.00s sshd: _____-admin [priv]
_____-us pts/1    ____________     06:40   13:26   0.02s  0.02s -bash

会话不会超时...

我当然重新启动了 sshd。

root@<server>:/etc/apache2# sshd -T | grep -i "ClientAlive"
clientaliveinterval 30
clientalivecountmax 0

客户端是否仍在发送 KeepAlive-Packages?我无法控制连接的所有客户端版本。

参考: https://www.golinuxcloud.com/disconnect-idle-ssh-session-tcpkeepaliv-linux/ https://secscan.acron.pl/centos7/5/2/13

编辑:TCPKeepAlive yes不会改变行为,会话仍然存在。我还在重新启动 sshd 后启动了一个新会话,以避免在 ssh 会话中保留旧设置。

EDIT2:在上面的描述中添加关键字“incoming”以使其更清楚,我希望我的 ssh 服务器(sshd)在空闲超时后断开连接,因为用户可能会忘记他们打开的(和未打开的)ssh 会话。

EDIT3:仅供参考-使用的sshd版本:

root@<server>:/etc/apache2# dpkg -l openssh-server
Gewünscht=Unbekannt/Installieren/R=Entfernen/P=Vollständig Löschen/Halten
| Status=Nicht/Installiert/Config/U=Entpackt/halb konFiguriert/
         Halb installiert/Trigger erWartet/Trigger anhängig
|/ Fehler?=(kein)/R=Neuinstallation notwendig (Status, Fehler: GROSS=schlecht)
||/ Name           Version            Architektur  Beschreibung
+++-==============-==================-============-=================================================================
ii  openssh-server 1:8.2p1-4ubuntu0.1 amd64        secure shell (SSH) server, for secure access from remote machines
root@<server>:/etc/apache2# sshd -V
unknown option -- V
OpenSSH_8.2p1 Ubuntu-4ubuntu0.1, OpenSSL 1.1.1f  31 Mar 2020

按预期工作

  • Debian 10(OpenSSH_7.9p1 Debian-10+deb10u2、OpenSSL 1.1.1d 2019 年 9 月 10 日)*
  • Ubuntu 16.04(OpenSSH_7.2p2 Ubuntu-4ubuntu2.8,OpenSSL 1.0.2g 2016 年 3 月 1 日)

*对于Debian 10 ,我想比较一下。不同的sshd -T选项:casignaturealgorithms,,,,,,,,,,gssapikexalgorithmshostbasedacceptedkeytypeshostkeyalgorithmskexalgorithmspasswordauthenticationpermitrootloginpubkeyacceptedkeytypespubkeyauthoptionssecuritykeyprovider

我只设置了passwordauthentication no

我从同一台主机连接,唯一的区别是我对相关服务器使用了公钥认证,对 Debian 10 服务器使用了密码认证。

抱歉,它变得太长了..它有点像是一个错误报告..

在 Debian 10 上:

  • ClientAliveInterval 10, ClientAliveCountMax 3:每 10 秒ssh -v录制一次消息debug1: client_input_channel_req: channel 0 rtype [email protected] reply 1
  • ClientAliveInterval 10ClientAliveCountMax 0:会话 10 秒后断开。

在 Ubuntu 20.04 上:

  • ClientAliveInterval 10, ClientAliveCountMax 0:每 10 秒ssh -v录制一次消息debug1: client_input_channel_req: channel 0 rtype [email protected] reply 1

答案1

从 openssh 服务器的较新版本开始,无法通过配置不活动/空闲超时/etc/ssh/sshd_config

虽然可以找到很多参考资料,说要ClientAliveCountMax 0结合设置来ClientAliveInterval N创建不活动/空闲超时,但显然这不是预期的功能,现在已经被故意关闭。

相关变更为sshd_config 手册页对于 ClientAliveCountMax,还有以下附加语句:“ Setting a zero ClientAliveCountMax disables connection termination.

有些人提交了针对 openssh 的错误报告,特别是这个这个. 一些特别相关的摘录:

ClientAliveCountMax=0 从未被指定为空闲超时。如果这样做,那么它只是偶然的,并且不可靠。例如,如果客户端指定了自己的 ServerAliveTimeout 或保持转发的 TCP 连接打开,那么它永远不会触发。

如果您需要空闲超时,那么我建议查看 shell 功能(例如 bash 的 TMOUT)或类似 PAM 模块的功能。

答案2

我找到了一个可能适用于所有登录(包括 SSH)的答案。我正在运行 Ubuntu 22.04.1 LTS。

从控制台:sudo nano(或任何加载的编辑器)/etc/profile

添加以下行:

输出=300

或者您想要的任何时间长度(以秒为单位)。更改后我重新启动了。

我在这里找到了信息:https://linuxhandbook.com/auto-logout-linux/ 并包含一个仅适用于 SSH 的部分,但当我尝试时,它似乎不适用于 SSH。由于此服务器是无头使用的,所以没问题。

答案3

就像这里的另一个答案所说,现代 SSH 连接不活动超时的关键是TMOUT=X,其中 X 是秒数 > 0。

我只想让我的用户帐户使用它,而不是系统上的每个用户,因此我在我的~/.bashrc文件中添加了以下内容/etc/profile

# Timout my SSH connection after 5 minutes
export TMOUT=300
readonly TMOUT
export TMOUT

相关内容