Wie bleibe ich angemeldet, während ClientAliveInterval eingestellt ist?

Wie bleibe ich angemeldet, während ClientAliveInterval eingestellt ist?

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 0und , 3was 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 ClientAliveIntervalin 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_configmir 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, viwird 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 -overschiedene 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.

verwandte Informationen