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.
screen
.
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.
screen
.
Antworten:
Ich habe dies /etc/ssh/ssh_config
für Linux und Mac ausprobiert :
Host *
ServerAliveInterval 120
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 oder ClientAliveInterval
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ügt chmod 644 ~/.ssh/config
.
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 beispielsweise screen
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 Sie screen -d
dann screen -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.
screen -d -r
Ihre letzte Sitzung wiederherstellen.
screen -dr
. Oder screen -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.html
Client-Konfiguration
Versuchen Sie, die Datei zu erstellen:
~/.ssh/config
Fügen Sie den Inhalt hinzu:
Host *
ServerAliveInterval 30
ServerAliveCountMax 5
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 *
durch Host <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
.
ClientAliveInterval 20
ClientAliveCountMax 5
Sie können entweder deaktivieren , indem Sie ClientAliveInterval
auf 0
oder zwicken ClientAliveInterval
und ClientAliveCountMax
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.
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:
TCPKeepAlive yes
im
/etc/ssh/ssh_config
Bearbeiten Sie für den Client Ihre ~/.ssh/config
(oder /etc/ssh/ssh_config
) Datei wie folgt:
Host *
TCPKeepAlive yes
ServerAliveInterval 120
TCPKeepAlive - Gibt an, ob das System TCP-Keepalive-Nachrichten an die andere Seite senden soll. Wenn sie gesendet werden, wird der Verbindungsabbruch oder der Absturz einer der Maschinen ordnungsgemäß bemerkt. Dies bedeutet jedoch, dass die Verbindung unterbrochen wird, wenn die Route vorübergehend unterbrochen wird und einige Benutzer dies als störend empfinden (die Standardeinstellung lautet "Ja").
ServerAliveInterval - Legt ein Zeitlimit in Sekunden fest, nach dessen Ablauf ssh (1) eine Nachricht über den verschlüsselten Kanal sendet, um eine Antwort vom Server anzufordern. Der Standardwert ist 0, was angibt, dass diese Nachrichten nicht an den Server gesendet werden.
Bearbeiten Sie für den Server Folgendes /etc/ssh/sshd_config
als:
ClientAliveInterval 600
ClientAliveCountMax 0
Wenn Sie möchten, dass der ssh-Client nach 10 Minuten (600 Sekunden) automatisch beendet wird (Timeout).
ClientAliveCountMax - Gibt die Gesamtzahl der vom SSH-Server gesendeten Checkalive-Nachrichten an, ohne dass der SSH-Client eine Antwort erhalten hat. Standard ist 3.
ClientAliveInterval - Gibt das Zeitlimit in Sekunden an. Nach x Sekunden sendet der SSH-Server eine Nachricht an den Client, in der er um Antwort bittet. Deafult ist 0 (Server sendet keine Nachricht zur Überprüfung an den Client).
Siehe auch: Was genau bewirken die Optionen ServerAliveInterval
und ClientAliveInterval
in sshd_config?
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.
Mosh (mobile Schale)
Remote-Terminal-Anwendung, die Roaming ermöglicht , intermittierende Konnektivität unterstützt und intelligentes lokales Echo und Leitungsbearbeitung von Benutzertastenanschlägen bietet .
Mosh ist ein Ersatz für SSH. Es ist robuster und reaktionsschneller, insbesondere über Wi-Fi, Mobilfunk und Fernverbindungen.
Mosh ist freie Software für GNU / Linux, FreeBSD, Solaris, Mac OS X und Android.
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.
Ich habe meine Antwort hier gepostet, da es sich nicht um eine Ubuntu-VM handelte.
ssh -o IPQoS=throughput user@host
Ich habe ein Skript auf dem Remoteserver, das unabhängig vom SSH-Konfigurationsclient oder -Server scheinbar nie ausfällt.
#!/bin/bash
while true; do date; sleep 10; done;
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.
top
laufen lassen
Sie 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.
do_ssh() {
ssh -o ServerAliveInterval=15 -o ServerAliveCountMax=3 $*
}
do_ssh_pty() {
ssh -tt -o "BatchMode=yes" -o "StrictHostKeyChecking=no" -o ServerAliveInterval=15 -o ServerAliveCountMax=3 $*
}
Jetzt do_ssh user@host
kann verwendet werden oder do_ssh user@host <args> <command>
und Keepalives werden aktiv.