GNU/Linux >> LINUX-Kenntnisse >  >> Linux

So verhindern Sie, dass SSH die Verbindung trennt, wenn es eine Weile inaktiv war

Um es klar zu sagen:Ich suche eine Lösung, die ich nach dem Einloggen einmal starte, und dann möchte ich dieses Terminal benutzen, weggehen, zwei Stunden später wiederkommen und weiterarbeiten, ohne etwas vor dem Weggehen zu tippen.

Das Problem ist, dass irgendetwas (normalerweise eine Firewall oder ein Load-Balancer) Leerlaufsitzungen abbricht. Wenn Sie Sitzungs-Keepalives konfigurieren, verhindern die Keepalives, dass Netzwerkgeräte die Sitzung als inaktiv betrachten.

Linux / Unix / Cygwin OpenSSH-Fix :
Die einfachste Lösung besteht darin, ssh-Client-Keepalives zu aktivieren. Dieses Beispiel sendet alle 60 Sekunden ein ssh-Keepalive:

ssh -o "ServerAliveInterval 60" <SERVER_ADDRESS>

Wenn Sie dies für alle Ihre Sitzungen aktivieren möchten, fügen Sie dies in Ihren /etc/ssh/ssh_config ein oder ~/.ssh/config :

ServerAliveInterval 60

Weitere Informationen finden Sie unter ssh_config Manpage

Putty Fix :

Speichern Sie dies in Ihren PuTTY-"Standardeinstellungen"...

  • Klicken Sie auf Verbindung
  • Geben Sie 60 in "Sekunden zwischen Keepalives" ein


Zusätzlich zu Mike Penningtons Antwort möchte ich Sie auf ServerAliveCountMax aufmerksam machen auch.

  • Die ServerAliveInterval sendet alle x Sekunden ein Keepalive (Standard ist 0 , wodurch diese Funktion deaktiviert wird, wenn sie nicht auf etwas anderes eingestellt ist).
  • Dies wird erledigt ServerAliveCountMax Mal, wenn keine Antwort kommt. Der Standardwert von ServerAliveCountMax ist 3 (siehe Manpage ssh_config).

Beispiel:Wenn Sie ServerAliveInterval einstellen bis 60 und verlassen Sie ServerAliveCountMax So wie es ist, bedeutet dies, dass das Keepalive nur auf 3 * 60 = 180 seconds = wartet 3 Minuten vor dem Beenden.

Um dies z.B. 2 Stunden lang versuchen, die Verbindung aufrechtzuerhalten, können Sie Folgendes tun:

Per Befehl:

Daher sollten Sie erwägen,

zu setzen
ssh -o "ServerAliveInterval 60" -o "ServerAliveCountMax 120" <SERVER_ADDRESS>

Beständig:

Um es dauerhaft zu machen, schreiben Sie es in /etc/ssh/ssh_config (gilt systemweit) oder ~/.ssh/config (gilt nur für Benutzer):

ServerAliveInterval 60
ServerAliveCountMax 120

Hinweis

Wie dislick richtig betont hat, ist dies je nach Situation möglicherweise nicht das, was Sie möchten:

  • Wer die Sitzung schnell beenden möchte, sobald der Server nicht mehr antwortet, sollte einen niedrigen Wert für ServerAliveCountMax wählen .
  • Wer eher daran interessiert ist, eine bereits aufgebaute Verbindung aufrechtzuerhalten (z.B. Sie fahren mit dem Zug und haben eine hohe Latenz), sollte einen höheren Wert für ServerAliveCountMax wählen um ssh zuzulassen um weiterhin zu versuchen, die Verbindung wiederherzustellen.

Siehe auch:

  • unix.stackexchange.com – Was ist das standardmäßige Leerlaufzeitlimit für OpenSSH?

Ich verwende Mobaxterm und bin auch auf dieses Problem gestoßen. Mobaxterm wird auch mit einer Option geliefert, um den Client am Leben zu erhalten, wenn der Client inaktiv ist. Gehen Sie zu Settings -> Configuration -> SSH . Es gibt einen Abschnitt mit dem Titel SSH settings , aktivieren Sie die Option SSH keepalive . Dann sollte das Problem verschwinden.


Linux
  1. Journalctl:Wie verhindert man, dass Text im Terminal abgeschnitten wird?

  2. Verhindern, dass Tmux auf Ssh startet?

  3. Wie kann man verhindern, dass `ls` die Ausgabe sortiert?

  4. So vermeiden Sie, dass ssh die Schlüssel-Passphrase für passwortlose Anmeldungen auffordert

  5. Wie höre ich auf, IP von EC2 zu known_hosts für ssh hinzuzufügen?

So richten Sie die Multi-Faktor-Authentifizierung für SSH unter Linux ein

So verhindern Sie ein Timeout von SSH

Wie Sie von Windows aus SSH in Ihren Linux-Server einbinden

So führen Sie SSH in WSL2 unter Windows 10 von einem externen Computer aus

Wie man SSH in einen Windows 10-Rechner von Linux ODER Windows ODER überall her einfügt

So verhindern Sie, dass SSH-Verbindungen aufgrund von Inaktivität getrennt werden, wenn Sie MobaXterm verwenden