Frage Linux SSH Timeout [geschlossen]


Ich habe mit einem Paar System gekämpft, das nach X Minuten der Untätigkeit ausgeht und nicht sicher ist, wie man es repariert.

Ich habe eine CentOS-Box in meinem Büro. Verbindung zu SSH kann es nicht für 2 Stunden berühren und es lebt noch, wenn ich etwas renne.

Allerdings zu Hause mit der gleichen Box verbinden, und es wird manchmal nach ein paar Sekunden, manchmal nach ein paar Minuten Timeout.

Ich würde denken, dass es meine Internetverbindung ist, aber wenn ich die Box aktiv benutze, bleibt sie verbunden.

Wenn ich jedoch aufhöre etwas zu googlen, wird eine Nachricht angezeigt und ich muss die Verbindung wiederherstellen.

Alles, was ich überprüfen kann, um zu sehen, was vor sich geht?


9
2018-04-08 19:11


Ursprung


Die Dokumentation für Ihren (unbenannten) Kunden. - Iain


Antworten:


Als erstes sollten Sie ServerAliveInterval einstellen. Dies sollte auf Ihrer Workstation eingestellt werden.

Auf Linux- oder OSX-Clients können Sie eine Konfigurationsdatei für Ihren Benutzer unter ~ / .ssh / config auf Ihrer Workstation erstellen. Fügen Sie die folgende Anweisung hinzu. In meinem Fall möchte ich, dass es alle Hosts betrifft, also lege ich es unter Host *.

Host *
    ServerAliveInterval 60

Dadurch wird alle 60 Sekunden ein Noop-Befehl gesendet, um die Verbindung offen zu halten. Möglicherweise möchten Sie den Wert optimieren, um Ihre Anforderungen zu erfüllen.

Stellen Sie auf der Serverseite sicher, dass TCPKeepAlive auf yes gesetzt ist.

grep TCPKeepAlive /etc/ssh/sshd_config
TCPKeepAlive yes

Wenn Sie Windows verwenden, müssen Sie auf die Dokumentation für Ihren Client verweisen.


14
2018-04-08 19:50





Linux vergeht keine Leerlauf-SSH-Verbindungen. Sie können eine SSH-Verbindung für unbegrenzte Zeit offen lassen, und solange keiner der Endpunkte neu gestartet wurde oder eine neue IP-Adresse erhalten hat, funktioniert die Verbindung auch dann, wenn Sie nach einer langen Leerlaufzeit darauf zugreifen.

Wenn jedoch statusbehaftete Middleboxen (NAT, Firewall usw.) vorhanden sind, werden diese wahrscheinlich Leerlaufverbindungen auslaufen lassen. Das Ergebnis davon ist, dass, obwohl die Verbindung an beiden Enden aktiv ist, die zwei Endpunkte nicht mehr kommunizieren können, da die Middlebox keine Pakete weiterleitet, bis der SSH-Client eine neue Verbindung öffnet.

Wenn Sie das Zeitlimit der MidiBox kennen, können Sie das Problem umgehen, indem Sie es konfigurieren ClientAliveInterval im /etc/ssh/sshd_config auf dem Server oder ServerAliveInterval im ~/.ssh/config auf dem Client. Zur optimalen Erkennung von unterbrochenen Verbindungen ist es ratsam, beide Einstellungen zu aktivieren. Dies erkennt auch fehlerhafte Verbindungen, wenn einer der Endpunkte neu gestartet wurde oder eine neue IP-Adresse erhalten hat.

Da Sie angeben, dass das Zeitlimit manchmal nur einige Sekunden beträgt, reicht dies möglicherweise nicht aus, um das Problem zu lösen. Eine sehr geringe scheinbare Zeitüberschreitung kann durch eine überladene oder falsch konfigurierte CGN verursacht werden. Sie müssen den Datenverkehr an verschiedenen Punkten des Kommunikationspfads überprüfen, um herauszufinden, ob ein CGN für die Fehler verantwortlich ist.

Wenn sich herausstellt, dass die Fehler dadurch verursacht werden, dass Ihr ISP etwas albernes wie Lastausgleichsverbindungen über mehrere CGNs ausführt, die den Verbindungsstatus nicht teilen, können Sie das Problem nicht selbst beheben, indem Sie einfach Ihre SSH-Konfiguration optimieren.

Wenn Sie bei einem ISP mit einer unzuverlässigen CGN stecken bleiben, die sie nicht reparieren wollen, sind die einzigen verbleibenden Optionen, entweder Client und Server auf Kernel-Versionen mit MPTCP-Unterstützung zu aktualisieren oder eine Tunnellösung zu verwenden, die Spontan toleriert Änderungen in den Port-Mappings auf dem NAT.


11
2018-04-09 19:58