Was ist das Standard-Leerlaufzeitlimit für OpenSSH?

25

Ich kann scheinbar keine Antwort auf diese einfache Frage finden, die ich für einige Compliance-Dokumente benötige.

Wenn CentOS 6.5 (OpenSSH 5.3p1-94.el6) standardmäßig installiert wird, wird die SSH-Sitzung eines Benutzers nach Ablauf der Leerlaufzeit beendet? Ich glaube, das Folgende kann eingestellt werden, um das Leerlauf-Timeout zu erhöhen, aber sie sind standardmäßig auskommentiert.

$ grep -i alive /etc/ssh/sshd_config
#TCPKeepAlive yes
#ClientAliveInterval 0
#ClientAliveCountMax 3

Gibt es auch einen Befehl, um eine Liste der aktuellen sshdEinstellungen zu sichern? Ich sehe nichts in man sshd.

Banjer
quelle
2
Einige Shells können so eingestellt werden, dass sie nach einer Zeitüberschreitung beendet werden. Dies würde dazu führen, dass die ssh-Sitzung beendet wird. Überprüfen Sie, ob Ihre TMOUT-Umgebungsvariable festgelegt ist.
Kenster

Antworten:

23

Die kommentierten Zeilen in zeigen sshd_confignormalerweise die Standardwerte an. Dies ist bei allen Zeilen Ihrer Frage der Fall. Sie können dies in der sshd_configManpage überprüfen . Hier sind die relevanten Ausschnitte:

TCPKeepAlive

      Gibt an, ob das System TCP-Keepalive-Nachrichten an die andere Seite senden soll. Wenn sie gesendet werden, wird der Verbindungsabbruch oder der Absturz einer der Maschinen ordnungsgemäß bemerkt. Dies bedeutet jedoch, dass Verbindungen unterbrochen werden, wenn die Route vorübergehend unterbrochen wird, und einige Leute finden, dass dies ärgerlich ist. Wenn andererseits keine TCP-Keepalives gesendet werden, bleiben Sitzungen möglicherweise auf unbestimmte Zeit auf dem Server hängen, sodass "Geister" -Benutzer zurückbleiben und Serverressourcen verbrauchen.

      Die Standardeinstellung lautet "yes" (zum Senden von TCP-Keepalive-Nachrichten). Der Server stellt fest, ob das Netzwerk ausfällt oder der Client-Host abstürzt. Auf diese Weise werden unbegrenzt lange Sitzungen vermieden.

      Um TCP-Keepalive-Nachrichten zu deaktivieren, muss der Wert auf "no" gesetzt werden.

      Diese Option wurde früher aufgerufen KeepAlive.

ClientAliveCountMax

      Legt die Anzahl der aktiven Client-Nachrichten fest (siehe unten), die gesendet werden dürfen, ohne dass sshd (8) Nachrichten vom Client zurückerhält. Wenn dieser Schwellenwert erreicht wird, während Client-Alive-Nachrichten gesendet werden, trennt sshd den Client und beendet die Sitzung. Es ist wichtig zu beachten, dass die Verwendung von Client-Alive-Nachrichten sehr unterschiedlich istTCPKeepAlive (unten)(über). Die Client-Alive-Nachrichten werden über den verschlüsselten Kanal gesendet und sind daher nicht fälschbar. Die von TCPKeepAliveaktivierte TCP-Keepalive-Option ist fälschbar. Der Client-Alive-Mechanismus ist nützlich, wenn der Client oder Server wissen muss, wann eine Verbindung inaktiv geworden ist.

      Der Standardwert ist 3. Wenn ClientAliveInterval(siehe unten) auf 15 gesetzt ist und ClientAliveCountMaxder Standardwert beibehalten wird, werden nicht reagierende SSH-Clients nach ca. 45 Sekunden getrennt. Diese Option gilt nur für Protokollversion 2.

ClientAliveInterval

      Legt ein Zeitlimit in Sekunden fest, nach dessen Ablauf sshd (8) eine Nachricht über den verschlüsselten Kanal sendet, um eine Antwort vom Client anzufordern, wenn keine Daten vom Client empfangen wurden . Der Standardwert ist 0, was angibt, dass diese Nachrichten nicht an den Client gesendet werden. Diese Option gilt nur für Protokollversion 2.

Jordanien
quelle
1
Korrigieren Sie mich, falls dies nicht der Fall ist, aber wenn sich zwischen mir und dem Computer keine Firewall befindet (mit Standardkonfigurationen), würde ich nie getrennt werden? Ich weiß, dass unsere Firewall inaktive TCP-Verbindungen nach 60 Minuten beendet. In diesem Fall werden die inaktiven Verbindungen geschlossen. Ich wollte nur überprüfen, ob OpenSSH selbst Sitzungen explizit schließt. Ich denke, die Antwort ist Nein, openssh schließt nicht explizit inaktive Verbindungen, aber Firewalls normalerweise . Die in Ihrer Antwort genannten Einstellungen tragen dazu bei, die Verbindung aufrechtzuerhalten oder die Sitzung ordnungsgemäß zu beenden, wenn sie unterbrochen wurde.
Banjer
2
Der zitierte Text besagt, dass der Standardwert für ClientAliveInterval 0 ist. Dies bedeutet, dass kein Zeitintervall definiert wird, für das eine Verbindung offen bleibt. Und doch wissen wir, dass das Zeitintervall standardmäßig einen endlichen Wert hat. Daher scheint es einen anderen Parameter zu geben, der festlegt, wie lange die Verbindung standardmäßig geöffnet bleibt. Wenn meine Analyse oben korrekt ist, nehmen wir an, dass sowohl Server als auch Client Linux-Computer sind, auf denen openssh ausgeführt wird, und beide alle Standardeinstellungen verwenden. In diesem Fall legt welche Seite den Standard fest, wie hoch ist sein Wert und wo wird er festgelegt?
Ben Crowell
2
@BenCrowell Und dennoch wissen wir, dass das Zeitintervall standardmäßig einen endlichen Wert hat. Welches Zeitintervall und woher weißt du das?
Piotr Dobrogost
9

Sie können SSH-Keepalive für die Client- oder Serverseite einrichten:

Client-Seite

Datei: /etc/ssh/ssh_config

Inhalt:

Host *
ServerAliveInterval XX
ServerAliveCountMax YY

Serverseite

Datei: /etc/ssh/sshd_config

Inhalt:

ClientAliveInterval XX
ClientAliveCountMax YY

Auszug aus: http://www.sysadmit.com/2016/02/linux-y-vmware-ssh-evitar-desconexion.html

Yamanoteon
quelle
6
Nützlich, aber beantwortet die Frage in keiner Weise.
bzeaman
6

OpenSSH beendet keine Shell-Sitzung, die seit einiger Zeit inaktiv ist. Dies ist nicht etwas, was OpenSSH tut. Das Beenden einer inaktiven Shell-Sitzung hat nichts mit der Konfiguration von OpenSSH zu tun.

Die Einstellungen, die Sie anzeigen, beziehen sich auf Zeitüberschreitungen, wenn die Verbindung unterbrochen wird, und sind unabhängig von der Shell auf dem Remotehost und den Aktionen des Benutzers.

Die Shell des Remote-Hosts wird möglicherweise nach einer gewissen Zeit der Inaktivität beendet (oder von einem anderen Prozess beendet). Dies hat jedoch nichts mit der Konfiguration des SSH-Dienstes auf dem Server und Ihres SSH-Clients zu tun.

Verbunden:


sshdVerwenden Sie zum Sichern der Konfiguration den erweiterten Testmodus als Root:

sshd -T

Dies wird in dokumentiert das sshd(8)Handbuch ( mit Blick auf OpenSSH_7.7, LibreSSL 2.7.2auf OpenBSD hier):

-T

Erweiterter Testmodus. Überprüfen Sie die Gültigkeit der Konfigurationsdatei, geben Sie die effektive Konfiguration an stdout aus und beenden Sie das Programm . Optional können Übereinstimmungsregeln angewendet werden, indem die Verbindungsparameter mit einer oder mehreren -COptionen angegeben werden.

Diese Option wurde 2008 sshdfür OpenSSH 5.1 / 5.1p1 hinzugefügt .

Kusalananda
quelle
3

Wenn die SSH-Verbindung nach einer Zeit der Inaktivität geschlossen werden soll, stellen die Shells selbst Timeout-Variablen bereit.

Für die Bash:

TMOUT: Wenn dieser Wert größer als Null ist, wird TMOUT als Standard-Zeitlimit für den eingebauten Lesevorgang behandelt. Der Auswahlbefehl wird beendet, wenn die Eingabe nicht nach TMOUT Sekunden eingeht, wenn die Eingabe von einem Terminal kommt. In einer interaktiven Shell wird der Wert als die Anzahl der Sekunden interpretiert, die auf die Eingabe gewartet werden soll, nachdem die primäre Eingabeaufforderung ausgegeben wurde. Bash wird beendet, nachdem auf diese Anzahl von Sekunden gewartet wurde, wenn keine Eingabe eingeht.

Testen Sie dies durch Ausführen TMOUT=10und warten Sie 10 Sekunden, um die Verbindung zu beenden.

Für tcsh:

Die Autologout-Shell-Variable kann so eingestellt werden, dass sie die Shell nach einer bestimmten Anzahl von Minuten Inaktivität abmeldet oder sperrt.

In tcsh lautet die Syntax zum Festlegen des Timeouts für zehn Minutenset autologout=10 . Dies funktioniert nicht in der ursprünglichen csh.

Sandeep Kumar Singh
quelle
-2

Wenn Sie möchten, dass das Timeout für alle 10 Sekunden beträgt, gehen Sie für die Serverkonfiguration (sshd_config) wie folgt vor:

ClientAliveInterval 10
ClientAliveCountMax 0

Wenn das Zeitlimit für lokale Clients 10 Sekunden betragen soll, gehen Sie für die Clientkonfiguration (ssh_config) wie folgt vor:

ServerAliveInterval 10
ServerAliveCountMax 0

Wenn der AliveCountMax-Parameter nicht Null ist, funktioniert er wahrscheinlich nicht, da der Server antwortet, dass der Timer zurückgesetzt wird (es sei denn, es liegt ein Verbindungsproblem vor). Sie können dies sehen, indem Sie den ssh-Client mit aktiviertem Debugging ausführen.

JohnA
quelle