Aus Compliance-Gründen sind alle meine Debian-Server auf ein Timeout nach 15 Minuten eingestellt, wobei die folgende Konfiguration verwendet wird:/etc/ssh/sshd_config
ClientAliveInterval 900
ClientAliveCountMax 0
Dies macht den Betrieb auf diesen Servern natürlich lästig und gefährlich, da es bei Leerlauf möglicherweise zu einer Unterbrechung der Verbindung kommen kann.
Ich suche nach einem einfachen Befehl, der eine Client-Sitzung aufrechterhält, ohne die vorhandene Konfiguration zu ändern.
Antwort1
Wenn Sie einemSicherheitstechnische Implementierungsrichtliniees heißt derzeit
ClientAliveInterval 600
ClientAliveCountMax 0
das wird die Verbindung trennen undLeerlaufSSH-Sitzung (d. h. ein Putty-Fenster) nach 10 Minuten.
In RHEL 7 lauten die Standardwerte für diese beiden Elemente bei einer Neuinstallation von rhel-server-7.9-x86_64-dvd.iso oder centos jeweils 0
und , 3
was dazu führt, dass eine SSH-Sitzung nie automatisch beendet wird.
Weitere Einzelheiten finden Sie unter:https://stackoverflow.com/questions/71174746/clientaliveinterval-is-not-closing-the-idle-connection
relevanteste:Diese sind nicht für den Leerlauf des Benutzers gedacht, sondern - wie dieser Manpage-Auszug anmerkt - für nicht reagierende SSH-Clients. Der Client reagiert nicht, wenn das Client-Programm eingefroren ist oder die Verbindung unterbrochen wurde. Der Client sollte nicht einfach deshalb nicht reagieren, weil der menschliche Benutzer sich von der Tastatur entfernt hat: Der SSH-Client empfängt weiterhin Pakete, die vom Server gesendet werden.
Es liegt beim Kunden,in putty.exe, unterVerbindungUndOptionen zur Steuerung der VerbindungEs gibtSekunden zwischen Keepalives (0 zum Ausschalten). Der Standardwert ist 0. Setzen Sie diesen Wert auf eine Zahl, die kleiner ist als die ClientAliveInterval
in festgelegte Zahl sshd_config
.
Wenn Sie putty.exe nicht unter Windows verwenden, sondern SSH von einer anderen Linux-Box aus, wird der Client-SSH über konfiguriert. Soweit /etc/ssh/ssh_config
mir bekannt ist, gibt es dort jedoch kein entsprechendes Element, um von Zeit zu Zeit ein Keepalive-Paket zu senden.
Hinweis: Wenn Sie putty.exe unter Windows mit einem Standard-Keepalive von 0 verwenden und der SSH-Server ein ClientAliveInterval gesetzt hat, vi
wird die Verbindung auch bei geöffnetem Server getrennt, was zu einemverlorenDatei, die vi
über ihre SWP-Datei wiederhergestellt wird. Oder wenn ein Programm ständig Ausgaben ausspuckt, die von der Serverseite kommen, und die SSH-Verbindung beendet wird, wodurch Ihr Job beendet wird ... muss es etwas von der Clientseite geben (ein Tastendruck), das zählt und einebleib am Leben. Mit putty.exe unter Windows ist das Problem also ziemlich einfach zu beheben. Bei SSH von Linux zu Linux weiß ich nicht, wie ich eine Trennung verhindern kann, ohne während der SSH-Sitzung auf der Clientseite eine Taste auf der Tastatur zu drücken.
Update: Von Linux zu Linux müssen Sie anscheinend ssh -o
verschiedene Optionen verwenden. Weitere Einzelheiten finden Sie unter:Wie funktioniert TCP-Keepalive in SSH?
Zum Beispiel:
ssh -o ServerAliveInterval=5 -o ServerAliveCountMax=1
ähnlich wie bei /etc/yum.conf mit gpgcheck=1 und einfachyum install --nogpgcheck :)
Antwort2
Ich denke, Sie haben die Konfiguration deaktiviert, indem SieClientAliveCountMaxZu0. Die Einstellung auf 1 sollte also funktionieren.
ClientAliveCountMax
Legt die Anzahl der Client-Alive-Nachrichten fest, die gesendet werden können, ohne dass sshd(8) Nachrichten vom Client zurückerhält. Wenn dieser Schwellenwert erreicht wird, während Client-Alive-Nachrichten gesendet werden, trennt sshd die Verbindung zum Client und beendet die Sitzung. Es ist wichtig zu beachten, dass sich die Verwendung von Client-Alive-Nachrichten stark von TCPKeepAlive unterscheidet. Die Client-Alive-Nachrichten werden über den verschlüsselten Kanal gesendet und sind daher nicht fälschbar. Die von TCPKeepAlive aktivierte TCP-Keepalive-Option ist fälschbar. Der Client-Alive-Mechanismus ist wertvoll, wenn der Client oder Server wissen müssen, wann eine Verbindung inaktiv geworden ist.
DerDer Standardwert ist 3.. WennClientAliveInterval ist auf 15 eingestelltund ClientAliveCountMax auf dem Standardwert belassen wird, werden nicht reagierende SSH-Clients nach ca.45 Sekunden.
Aber ich muss zugeben, dass ich @TienPhan zustimme. Es ist besser, die Konfiguration nicht auf dem Server durchzuführen. Es hängt jedoch vom Anwendungsfall ab. Wenn alle Benutzer auf die gleiche Weise behandelt werden sollen, ist die serverseitige Konfiguration die beste Option.
Antwort3
Tatsächlich müssen wir die Intervallzeit nicht serverseitig einstellen. Mehr Zeug wird Sie nicht glücklich machen.
Sie können „ServerAliveInterval“ verwenden und es wie folgt zur Datei ~/.ssh/config hinzufügen:
host *
ServerAliveInterval 120
Hinweis: 120 sind Sekunden, Sie können sie nach Belieben ändern.
Dann wirkt es sich auf alle Server in dieser Datei aus. Oder Sie können es für einzelne Server festlegen.