SSH-Verbindungen frieren mit "Write failed: Broken pipe" ein

12

Ich verbinde mich mit einer CentOS 5.5-Box über SSH von einem Ubuntu 11.04-Computer.

Die Verbindung scheint erwartungsgemäß zu funktionieren, wenn sie aktiv verwendet wird (dh keine Verzögerung oder kein Verlust). Wenn sie jedoch für eine Weile inaktiv bleibt, friert sie ein und reagiert nicht mehr. Eventuell wird die Fehlermeldung "Write failed: Broken pipe" zurückgegeben und ich bin wieder auf der Eingabeaufforderung meines lokalen Rechners.

Was kann ich tun, um dieses Problem zu beheben, um herauszufinden, was gerade passiert, und um es zu lösen? Als Entwickler bedeutet dies, dass ich in meinem Leben ständig neue Kontakte knüpfen muss.

Stephen RC
quelle

Antworten:

15

Es sieht so aus, als ob die SSHD-Konfiguration der CentOS-Box nicht für den KeepAlive-Client konfiguriert ist.

Löschen Sie diese beiden Zeilen in Ihrer CentOS-sshd-Konfiguration (/ etc / ssh / sshd_config), starten Sie sie neu und genießen Sie es!

KeepAlive yes
ClientAliveInterval 60

Wenn Sie schon dabei sind, empfehle ich Ihnen, gnu screenzu verwenden, um Ihre Sitzung auf der CentOS-Seite am Leben zu erhalten.

yuriismaster
quelle
1
KeepAlive wurde in TCPKeepAlive umbenannt und kann auf dem Standardwert yes belassen werden. ClientAliveInterval sollte ausreichen. Sehen man sshd_config.
Dienstag,
9

Die eigentliche Antwort lautet fast immer, dass sich im Pfad ein NAT-Gerät befindet, normalerweise eine Firewall, deren Statustabellen eine ziemlich aggressive Zeitüberschreitung aufweisen. Da Sie Ihre ssh-Verbindung für einige Zeit im Leerlauf lassen, "vergisst" das NAT-Gerät die Zuordnung zwischen Ihrer internen Adresse und der Quellportnummer und Ihrer kurzlebigen Adresse und Portnummer außerhalb von NAT.

Wenn Sie später versuchen, etwas in diesem SSH-Fenster zu tun, wird Ihnen ein neues kurzlebiges Adress- / Port-Paar zugewiesen, das der Ziel-SSH-Server nicht kennt und auf das er nicht reagiert. Später wird eine lokale Zeitüberschreitung erreicht, und die Verbindung wird von Ihrem lokalen Computer getrennt.

Die praktische Lösung hierfür besteht darin, genau das zu tun, was yuriismaster vorschlägt: KeepAlives aktivieren (wodurch sichergestellt wird, dass der reguläre Datenverkehr diesen Statustabelleneintrag "kitzelt") und screenauf der Remote-Seite verwenden ( um den Status beizubehalten, falls etwas herunterfällt). Ich poste diese Antwort nur, weil Sie gefragt haben, was passiert und was Sie dagegen tun sollen. Hoffentlich wird klar, warum die Vorschläge von yuriismaster gut sind.

MadHatter
quelle
Das macht durchaus Sinn! Wir haben ein NAT mit DMZ-Setup für diese Box. Ich werde die Timeout-Konfiguration ausprobieren und sehen, ob das bei mir funktioniert. Danke :)
Stephen RC
Ich akzeptiere Ihre, da Sie mir geholfen haben, die Gründe für das Problem zu verstehen. Aber der Kredit muss an @yuriismaster gehen, um das Problem zu beheben.
Stephen RC
Valorin: Auf jeden Fall, und er war der Erste. Ehrlich gesagt denke ich, dass er die Annahme mehr verdient als ich; aber es ist deine Frage, also sollte es gehen, wie du es für richtig hältst. Vielen Dank für das Feedback.
MadHatter