it-swarm.com.de

Wie kann ich verhindern, dass meine SSH-Sitzungen einfrieren?

Ich habe ServerAliveInterval und bei wenigen Computern auch ClientAliveInterval in SSH-Client/Server-Konfigurationsdateien auf 540 gesetzt (ich nehme an, es wäre keine gute Idee, es auf mehr als das zu setzen). Ich arbeite mit vielen SSH-Sitzungen, die derzeit nach einigen Minuten einfrieren.

Wie kann ich es reparieren? Ich möchte, dass eine Sitzung überhaupt nicht einfriert. Wenn ich eine Sitzung um 8 Uhr öffne und sie beispielsweise 4 Stunden lang nicht benutze, kann ich sie beispielsweise um 12 Uhr erneut verwenden, ohne mich erneut anmelden zu müssen .

79
syntagma

Die Änderungen, die Sie in /etc/ssh/ssh_config Und /etc/ssh/sshd_config Vorgenommen haben, sind korrekt, haben jedoch keine Auswirkungen.

Nehmen Sie die folgenden Konfigurationsänderungen auf dem Client vor, damit Ihre Konfiguration funktioniert:

/etc/ssh/ssh_config

Host *
ServerAliveInterval 100

ServerAliveInterval Der Client sendet alle 100 Sekunden ein Nullpaket an den Server, um die Verbindung aufrechtzuerhalten

NULL-Paket Wird vom Server an den Client gesendet. Das gleiche Paket wird vom Client an den Server gesendet. A TCP NULL-Paket enthält kein Steuerungsflag wie SYN, ACK, FIN usw., da der Server keine Antwort vom Client benötigt. Das NULL-Paket wird hier beschrieben: https://tools.ietf.org/html/rfc6592

Konfigurieren Sie dann den sshd-Teil auf dem Server.

/etc/ssh/sshd_config

ClientAliveInterval 60
TCPKeepAlive yes
ClientAliveCountMax 10000

ClientAliveInterval Der Server wartet 60 Sekunden, bevor er ein Nullpaket an den Client sendet, um die Verbindung aufrechtzuerhalten

TCPKeepAlive Ist vorhanden, um sicherzustellen, dass bestimmte Firewalls keine inaktiven Verbindungen trennen.

ClientAliveCountMax Der Server sendet lebendige Nachrichten an den Client, obwohl er keine Nachricht vom Client zurückerhalten hat.

Starten Sie zum Schluss den ssh server

service ssh restart Oder service sshd restart Je nachdem, auf welchem ​​System Sie sich befinden.

94

Persönlicher Vorschlag: Verwenden Sie screen auf dem Remote-Host. Es wird Ihre Verbindung so lange am Leben halten, wie sie in einem Terminal aktiv bleibt.

Folgendes füge ich normalerweise zu /etc/screenrc Hinzu, um meine Bildschirmsitzungen schnell zu identifizieren:

hardstatus alwayslastline
hardstatus string "%{= kG}[ %{G}%H %{g}][ %{=kw}%?%-Lw%?%{r}(%{W}%n*%f%t%?(%u)%?%{r})%{w}%?%+Lw%?%?%= %{g}][%{B}%Y-%m-%d %{W}%c %{g}]"
defscrollback 8192

EDIT : Hinweise.

Die Zeichenfolge hardstatus zeigt eine untere Statuszeile wie die folgende an: Screen session example with three open tabs

Der Scrollback-Puffer wird anstelle der üblichen 1000-1500 (abhängig von der Verteilung) auch auf 8192 Zeilen erweitert.

13
user86969

Mit OpenSSH:

Sie müssen aktivieren

TCPKeepAlive yes

beide in Ihrem Client ssh_config (z. B. /etc/ssh/ssh_config oder in ~/.ssh/config) und Ihr Ziel-SSH-Server, auf dem OpenSSH ausgeführt wird (z. B./etc/ssh/sshd_config).

Jedes Mal, wenn Ihre Verbindung inaktiv ist, sendet OpenSSH ein Dummy-Paket an Ihren Zielhost ...

2
Martin Allert

Wenn das Problem ein Laptop im Ruhezustand oder eine Netzwerkverbindung ist, die nicht dem Präfekten entspricht, würde ich die Verwendung von mosh empfehlen, die über ssh läuft und eine automatische Wiederverbindung ermöglicht.

Von der Website :

Mosh (mobile Shell)

Remote-Terminal-Anwendung, die Roaming ermöglicht, intermittierende Konnektivität unterstützt und intelligentes lokales Echo und Zeilenbearbeitung von Benutzertastenanschlägen bietet.

Mosh ist ein Ersatz für SSH. Es ist robuster und reaktionsschneller, insbesondere über WLAN-, Mobilfunk- und Fernverbindungen.

Mosh ist eine kostenlose Software für GNU/Linux, BSD, MacOS, Solaris, Android, Chrome und iOS.

In Kombination mit tmux (oder dem älteren screen) kann ich über ssh von meinem Laptop aus eine Verbindung zu einem Server herstellen und tagelang in Verbindung bleiben, auch wenn ich die WLAN-Verbindungen ändere und Überleben von mobilen Datenausfällen.

2
Tom Hale

Überprüfen Sie Ihre SSHD-Konfiguration auf dem Host-Computer /etc/sshd_config für die Einstellung IdleTimeout .

IdleTimeout time
Sets idle timeout limit to time in seconds (s or nothing afternumber), 
in minutes (m), in hours (h), in days (d), or in weeks (w).If the 
connection have been idle (all channels) for that long time thechild 
process is killed with SIGHUP, and connection is closed down.
1
iyrin

In meinem Fall war das Problem in der großen MTU-Größe. Sie können die MTU auf dem Router ändern, wenn Sie NAT verwenden, aber ich ändere die MTU auf dem Server:

Sudo /sbin/ifconfig eth0 mtu 1036
Sudo /etc/init.d/networking restart
0
Vasin Yuriy

Ein kleiner Hack, den ich verwende, wenn es nicht möglich ist, den Bildschirm zu verwenden oder die Einstellungen des Host-SSH-Servers oder einen der oben genannten guten und richtigen Vorschläge zu bearbeiten ...

Laufen Sie einfach nach oben, wenn Sie die Sitzung in Ruhe lassen möchten.

Im Allgemeinen wird dies auf unbestimmte Zeit am Leben bleiben, obwohl dies, wie andere bereits erwähnt haben, in Bezug auf die Sicherheit möglicherweise nicht immer sinnvoll ist!

0
technicalbloke