Linux SSH Timeout [geschlossen]

10

Ich hatte Probleme mit ein paar System-Timeouts nach X Minuten Inaktivität und bin mir nicht sicher, wie ich das beheben soll.

Ich habe eine CentOS-Box in meinem Büro. Connect to SSH kann es 2 Stunden lang nicht berühren und es ist immer noch aktiv, wenn ich etwas laufen lasse.

Stellen Sie jedoch zu Hause eine Verbindung zu derselben Box her, und manchmal tritt nach einigen Sekunden eine Zeitüberschreitung auf, manchmal nach ein paar Minuten.

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

Wenn ich jedoch aufhöre zu tippen, um etwas zu googeln, wird eine nicht verbundene Nachricht angezeigt und ich muss die Verbindung erneut herstellen.

Kann ich irgendetwas überprüfen, um zu sehen, was los ist?

Anthony Fornito
quelle
4
Die Dokumentation für Ihren (unbenannten) Kunden.
user9517

Antworten:

14

Als erstes sollten Sie das ServerAliveInterval festlegen. Dies sollte auf Ihrer Workstation eingestellt sein.

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

Host *
    ServerAliveInterval 60

Dadurch wird alle 60 Sekunden eine Noop-Anweisung gesendet, um die Verbindung offen zu halten. Möglicherweise möchten Sie den Wert an Ihre Bedürfnisse anpassen.

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

grep TCPKeepAlive /etc/ssh/sshd_config
TCPKeepAlive yes

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

digitale Sucht
quelle
11

Linux führt keine Zeitüberschreitung für inaktive SSH-Verbindungen durch. Sie können eine SSH-Verbindung auf unbestimmte Zeit offen lassen. Solange keiner der Endpunkte neu gestartet wurde oder eine neue IP-Adresse erhalten hat, funktioniert die Verbindung auch nach einer langen Leerlaufzeit, wenn Sie darauf zugreifen.

Wenn jedoch zustandsbehaftete Middleboxen (NAT, Firewall usw.) vorhanden sind, treten bei diesen wahrscheinlich Zeitüberschreitungen für inaktive Verbindungen auf. Dies hat zur Folge, dass die beiden Endpunkte nicht mehr miteinander kommunizieren können, obwohl die Verbindung an beiden Enden aktiv ist, da die Middlebox die Weiterleitung von Paketen verweigert, bis der SSH-Client eine neue Verbindung öffnet.

Wenn Sie das Timeout des middlebox kennen, können Sie durch die Konfiguration um das Problem zu umgehen ClientAliveIntervalin /etc/ssh/sshd_configauf dem Server oder ServerAliveIntervalin ~/.ssh/configauf dem Client. Für eine optimale Erkennung unterbrochener Verbindungen ist es ratsam, beide Einstellungen zu aktivieren. Dadurch werden auch unterbrochene Verbindungen erkannt, wenn einer der Endpunkte neu gestartet wurde oder eine neue IP-Adresse erhalten hat.

Da Sie angeben, dass das Zeitlimit manchmal nur wenige Sekunden beträgt, reicht dies möglicherweise nicht aus, um Ihr Problem zu lösen. Ein sehr geringes scheinbares Zeitlimit kann durch ein überlastetes oder falsch konfiguriertes 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 Dummes tut, z. B. Lastausgleichsverbindungen über mehrere CGNs, die den Verbindungsstatus nicht gemeinsam nutzen, können Sie das Problem nicht selbst beheben, indem Sie einfach Ihre SSH-Konfiguration anpassen.

Wenn Sie mit einem ISP mit einem unzuverlässigen CGN nicht weiterkommen, dessen Behebung er ablehnt, sind die einzigen mir bekannten Optionen, entweder Client und Server auf Kernelversionen mit MPTCP-Unterstützung zu aktualisieren oder eine Tunnellösung zu verwenden, die spontan toleriert Änderungen in den Portzuordnungen auf dem NAT.

Kasperd
quelle