I want incoming ssh-sessions to automatically disconnect upon inactivity for a security-critical server.
I've set the following settings
TCPKeepAlive no
ClientAliveInterval 30
ClientAliveCountMax 0
I would expect sshd not to send KeepAlive-Packages due to TCPKeepAlive
and ClientAliveCountMax
- and my sessions to timeout after 30 seconds. On top of that I think TCPKeepAlive
could be left at its default which should be yes
.
I've checked existing sessions like that:
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
The sessions won't timeout...
I restarted sshd of course.
root@<server>:/etc/apache2# sshd -T | grep -i "ClientAlive"
clientaliveinterval 30
clientalivecountmax 0
Could the client still be sending KeepAlive-Packages? I cannot control all versions of clients that connect..
References: https://www.golinuxcloud.com/disconnect-idle-ssh-session-tcpkeepaliv-linux/ https://secscan.acron.pl/centos7/5/2/13
EDIT: 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
Работает, как ожидалось в
casignaturealgorithms
, gssapikexalgorithms
, hostbasedacceptedkeytypes
, hostkeyalgorithms
, kexalgorithms
, passwordauthentication
, permitrootlogin
, pubkeyacceptedkeytypes
, pubkeyauthoptions
, securitykeyprovider
I've only set passwordauthentication no
I've connected from the same host, the only difference is I used pubkey authentication for the server in question and password authentication for the Debian 10 server.
Sorry that it's getting long.. It kinda turns into a bug report..
On Debian 10:
ClientAliveInterval 10
, ClientAliveCountMax 3
: ssh -v
records the message debug1: client_input_channel_req: channel 0 rtype keepalive@openssh.com ответ 1
каждые 10 секунд ClientAliveInterval 10
, ClientAliveCountMax 0
: сеанс отключается через 10 секунд. В Ubuntu 20.04:
ClientAliveInterval 10
, ClientAliveCountMax 0
: ssh -v
записывает сообщение debug1: client_input_channel_req: channel 0 rtype keepalive@openssh.comответ 1
каждые 10 секунд Примечание : размер sda4, вероятно, слишком велик, поскольку вы используете его только для передачи файлов между Windows и Ubuntu. В какой-то момент вы можете захотеть изменить размер sda4.
Убедитесь, что у вас есть хорошая резервная копия важных файлов Ubuntu, так как эта процедура может привести к повреждению или потере данных.
Помните следующее:
всегда запускайте вся процедура с выдачей swapoff на любых смонтированных разделах подкачки, в частности этот и этот . Некоторые особенно важные выдержки:
ClientAliveCountMax = 0 никогда не указывался для работы в режиме ожидания. тайм-аут. Если бы это было так, то это было бы случайно и было бы ненадежный. Например, если клиент указал собственный ServerAliveTimeout или оставил открытым перенаправленное TCP-соединение, тогда оно никогда не сработало.
и
Если вам нужен тайм-аут простоя, я предлагаю посмотреть на функции оболочки (например, TMOUT в bash) или что-то вроде модуля PAM.