Wie kann ich SSH sowohl auf dem Client als auch auf dem Server konfigurieren, um Write Failed: broken pipe
Fehler zu vermeiden ? Es tritt häufig auf, wenn Sie Ihren Clientcomputer in den Ruhezustand versetzen und später fortsetzen.
283
screen
.Antworten:
Ich habe dies
/etc/ssh/ssh_config
für Linux und Mac ausprobiert :So oft sollte in Sekunden eine Keepalive-Nachricht an den Server gesendet werden. Wenn das nicht funktioniert, trainieren Sie einen Affen alle zwei Minuten, um die Eingabetaste zu drücken, während Sie arbeiten.
Sie können entweder
ServerAliveInterval
auf/etc/ssh/ssh_config
dem Client-Computer oderClientAliveInterval
auf/etc/ssh/sshd_config
dem Server-Computer festlegen . Reduzieren Sie das Intervall, wenn der Fehler weiterhin auftritt.Die Konfiguration für einen einzelnen Benutzer kann
~/.ssh/config
sowohl auf der Server- als auch auf der Clientseite in einer Datei festgelegt werden . Stellen Sie sicher, dass die Datei über die richtigen Berechtigungen verfügtchmod 644 ~/.ssh/config
.quelle
Bad configuration option: ClientAliveInterval
Bad configuration option
OSX 10.8.4 wird derselbe Fehler angezeigt.SSH-Sitzungen können aus zahlreichen und möglicherweise unvermeidbaren Gründen unterbrochen werden.
Ein nützliches Hilfsprogramm, mit dem sich dadurch verursachte Probleme abmildern lassen, heißt
screen
. Screen ist ein leistungsstarkes Dienstprogramm, mit dem Sie mehrere Terminals steuern können, die unabhängig von der SSH-Sitzung am Leben bleiben. Wenn Sie beispielsweisescreen
in einer SSH-Sitzung arbeiten, wird ein neues Terminal geöffnet, mit dem Sie Jobs ausführen können. Nehmen wir an, Ihre SSH-Sitzung stirbt dabei. Wenn Siescreen -d
dannscreen -r
ausführen, wird die letzte Sitzung erneut geöffnet, und Sie können von dort aus fortfahren. Stellen Sie sicher, dass Sie einige der Dokumentationen gelesen haben, bevor Sie sie verwenden.quelle
screen -d -r
Ihre letzte Sitzung wiederherstellen.screen -dr
. Oderscreen -x
je nachdem, was Sie vorhaben. Der Punkt ist, man sollte wissen, was all diese Schalter tun, damit man die entsprechenden verwenden und nicht nur blindlings den Vorschlägen der Internet-Leute folgen kann. Hier gibt es eine nette kompakte Zusammenfassung: ss64.com/bash/screen.htmlClient-Konfiguration
Versuchen Sie, die Datei zu erstellen:
Fügen Sie den Inhalt hinzu:
Jetzt ssh auf deinen Server und schau, ob dein Problem behoben ist. Die Option ClientAliveInterval ist nur nützlich, wenn Sie den SSH-Server (auch als SSHD bezeichnet) konfigurieren. Sie ändert nichts auf der SSH-Clientseite. Verwenden Sie sie daher nicht in der obigen Konfigurationsdatei.
Dies sendet ein Hallo-bist-du-da-Signal an den Server, wenn in den letzten 30 Sekunden keine Pakete empfangen wurden (wie oben angegeben). Wenn jedoch die Anzahl der aufeinanderfolgenden Hello-Are-You-There-Signale ServerAliveCountMax erreicht, trennt ssh die Verbindung zum Server. Dieser Wert ist standardmäßig auf 3 eingestellt (also 3 * 30 = 90 Sekunden ohne Serveraktivität). Erhöhen Sie ihn, wenn er Ihren Anforderungen entspricht. Es gibt viel mehr Konfigurationsoptionen für die .ssh / config-Datei und Sie können lesen:
Verwenden einer SSH-Konfigurationsdatei
Weitere Informationen zu anderen Optionen. Möglicherweise möchten Sie dies nicht auf alle Server anwenden, mit denen Sie in diesem Beispiel verbunden sind. Oder beschränken Sie es auf einen bestimmten Server, indem Sie die Zeile
Host *
durchHost <IP>
(durch eine IP-Adresse ersetzen, siehe Manpage ssh_config) ersetzen.Serverkonfiguration
Ebenso können Sie den Server anweisen, mit Ihren Clients schonend umzugehen. Die Konfigurationsdatei ist
/etc/ssh/sshd_config
.Sie können entweder deaktivieren , indem Sie
ClientAliveInterval
auf0
oder zwickenClientAliveInterval
undClientAliveCountMax
eine maximale SSH - Client Inaktivität einzustellen , ohne an die Sonden zu reagieren. Ein Vorteil dieser Einstellungen gegenüber TCPKeepAlive besteht darin, dass die Signale über die verschlüsselten Kanäle gesendet werden, sodass es weniger wahrscheinlich ist, dass sie gefälscht werden.quelle
Ich aktualisiere einen Ubuntu-Server aus der Ferne von "lucid" auf "exact" und habe während des Upgrades die SSH-Verbindung mit der Meldung "Write failed. Brocken pipe" verloren. ClientAliveInterval und ServerAliveInterval haben nichts getan. Die Lösung besteht darin, die TCPKeepAlive-Optionen im Client ssh zu aktivieren:
im
quelle
Bearbeiten Sie für den Client Ihre
~/.ssh/config
(oder/etc/ssh/ssh_config
) Datei wie folgt:Bearbeiten Sie für den Server Folgendes
/etc/ssh/sshd_config
als:Wenn Sie möchten, dass der ssh-Client nach 10 Minuten (600 Sekunden) automatisch beendet wird (Timeout).
Siehe auch: Was genau bewirken die Optionen
ServerAliveInterval
undClientAliveInterval
in sshd_config?quelle
Ich liebe Mosh absolut. Ich gehe häufig auf einen Server, schließe meinen Laptop und gehe in ein Café, öffne ihn und mache weiter, als ob sich nichts geändert hätte.
quelle
Für mich war ich dabei,
Write failed: Broken pipe
selbst wenn ich aktiv in vim oder an der Shell-Eingabeaufforderung tippte. Ich konnte auch vor Ort eine Weile nicht im Internet surfen. (Ich habe über Terminal eine Remote-Verbindung zu Ubuntu hergestellt.)Andere in meinem Netzwerk streamen viele Videos von Netflix und anderen Orten. Ich kann es nicht beweisen, aber ich vermute, dass es sich um ein ISP- oder Router-Problem handelt. Beispielsweise zeigen Verizon und Netflix bei Netzwerkproblemen ihrer Kunden mit dem Finger aufeinander.
Wenn Sie eine DFÜ-Verbindung haben und Videos oder Musik mit einer gleichzeitigen SSH- oder Telnet-Verbindung streamen, ist es unvermeidlich, dass Sie irgendwann eine kaputte Pipe-Nachricht erhalten. Durch die Aktualisierung des Breitbandpakets meines Internetdienstanbieters wurde meine unterbrochene Verbindung anscheinend seltener.
quelle
Ich habe meine Antwort hier gepostet, da es sich nicht um eine Ubuntu-VM handelte.
https://unix.stackexchange.com/questions/259225/packet-write-wait-broken-pipe-even-leaving-top-running
quelle
Ich habe ein Skript auf dem Remoteserver, das unabhängig vom SSH-Konfigurationsclient oder -Server scheinbar nie ausfällt.
Speichern Sie es in einer dummy.sh-Datei und führen Sie es schnell aus, bevor Sie das Fenster minimieren oder es verlassen. Der aktuelle Zeitstempel wird weiterhin auf dem Server gedruckt, und Ihre Verbindung bleibt bestehen, solange die Verbindung aus keinem anderen Grund getrennt wird. Wenn Sie zu diesem Terminal zurückkehren, drücken Sie einfach STRG + C und arbeiten Sie weiter.
quelle
top
laufen lassenSie können diese Argumente bei jedem Aufruf von ssh hinzufügen:
-o ServerAliveInterval=15 -o ServerAliveCountMax=3
In diesem Fall müssen Sie die Konfigurationsdateien / etc / ssh / * nicht bearbeiten.
Sie können einen Bash-Alias oder eine Funktion oder ein Skript erstellen, um dies zu vereinfachen.
Diese Bash-Funktionen können Sie beispielsweise in Ihre .bashrc-Datei einfügen. Do_ssh wird manuell verwendet, um Keepalives zu aktivieren. do_ssh_pty wird in Skripten verwendet, um pty festzulegen und Eingabeaufforderungen zu vermeiden.
Jetzt
do_ssh user@host
kann verwendet werden oderdo_ssh user@host <args> <command>
und Keepalives werden aktiv.quelle