Was bedeutet die Broken Pipe-Nachricht in einer SSH-Sitzung?

103

Manchmal wird meine SSH-Sitzung mit einer Write failed: Broken pipeNachricht getrennt. Was heißt das? Und wie kann ich meine Sitzung offen halten?

Ich weiß über screen, aber das ist nicht die Antwort, die ich suche. Ich denke, das ist eine sshdKonfigurationsoption.

Peter Stuifzand
quelle

Antworten:

89

Möglicherweise schließt Ihr Server Verbindungen, die zu lange inaktiv sind. Sie können entweder Ihren Client ( ServerAliveInterval) oder Ihren Server ( ClientAliveInterval) aktualisieren

 ServerAliveInterval
         Sets a timeout interval in seconds after which if no data has
         been received from the server, ssh(1) will send a message through
         the encrypted channel to request a response from the server.  The
         default is 0, indicating that these messages will not be sent to
         the server.  This option applies to protocol version 2 only.

 ClientAliveInterval
         Sets a timeout interval in seconds after which if no data has
         been received from the client, sshd(8) will send a message
         through the encrypted channel to request a response from the
         client.  The default is 0, indicating that these messages will
         not be sent to the client.  This option applies to protocol
         version 2 only.

So aktualisieren Sie Ihren Server (und starten ihn neu sshd)

echo "ClientAliveInterval 60" | sudo tee -a /etc/ssh/sshd_config

Oder clientseitig:

echo "ServerAliveInterval 60" >> ~/.ssh/config 
Gert
quelle
NB, dass manchmal "* AliveInterval" nicht ausreicht stackoverflow.com/questions/10665267/…
Rogerdpack
1
Auf ~/.ssh/configmeinem Mac gibt es keine . Muss ich sie dort erstellen oder ist sie woanders?
AGamePlayer
5
@AwQiruiGuo Ja, Sie sollten zuerst das Verzeichnis ( ~/.ssh) erstellen . Alsomkdir -p ~/.ssh; chmod 700 ~/.ssh; touch ~/.ssh/config
Gert
6

Eine alternative Lösung wäre moshdie mobile Shell . Im Gegensatz zu ssh verbindet es sich über UDP und unterstützt Roaming. Sie können Ihre Sitzung zu Hause beginnen, Ihren Laptop anhalten, zur Arbeit / zu Freunden / überall dort bringen, wo Sie über Internet verfügen, Ihren Laptop entsperren und weiterarbeiten, als wäre nichts passiert. Dies ist besonders nützlich, wenn Sie eine schlechte Internetverbindung haben: Es wird sofort eine Rückmeldung angezeigt, wenn Ihre Tastatureingaben den Server nicht erreichen, und es wird kontinuierlich versucht, die Verbindung wiederherzustellen.

Installation und Einrichtung sind einfach: Es ist jetzt in allen aktuellen Linux-Distributionen (plus einigen Nicht-Linux-Distributionen) enthalten und koordiniert die Sitzungsinitialisierung und -authentifizierung über eine vorherige ssh-Verbindung. Wenn Sie in der Lage sind, eine Verbindung über ssh user@serverherzustellen, können Sie sehr wahrscheinlich eine Verbindung mit mosh herstellen, indem Sie einfach anrufen mosh user@server, wenn die mosh-Pakete auf beiden Seiten installiert sind.

Der Hauptgrund für Verbindungsfehler ist, dass Sie den Server über einen UDP-Port (Standardbereich: 60000-61000) erreichen müssen, damit mosh funktioniert. Befindet sich der Server also hinter einer Firewall, hat man meistens Pech, wenn man selbst keine Lücken finden kann ( Sicherheitsrisiken ).

Perseiden
quelle
3

Wenn Sie eine längere Verbindungsdauer wünschen, fügen Sie im Client Folgendes hinzu:

echo 'ServerAliveInterval 30' | sudo tee -a ~/.ssh/config
echo 'ServerAliveCountMax 1200' | sudo tee -a ~/.ssh/config

ServerAliveCountMaxStandardmäßig ist dies auf 3 eingestellt. Sobald der ServerAliveIntervalServer 3 kleine Datenpakete gesendet hat, wird er sich automatisch abmelden. Wenn Sie den Wert auf 1200 setzen, muss dieser Vorgang mindestens 1200 Mal ausgeführt werden. Kurz gesagt, Sie sollten mindestens 30 * 1200 Sekunden (10 Stunden) verbunden sein.

Francisco Costa
quelle
5
Warum sollte sudo für eine Datei verwendet werden, die entweder dem aktuellen Benutzer gehört oder noch nicht existiert?
Hubert Grzeskowiak
2

Dies bedeutet normalerweise, dass Ihre Netzwerkverbindung (TCP) zurückgesetzt wurde. ZB Ihr Internetprovider hat Sie wieder verbunden oder ähnliches.

maxschlepzig
quelle
1

Ich hatte das gleiche Problem, aber es ist nicht wie erwartet. Wenn Sie feststellen, dass in demselben Netzwerk ein anderer Server nach derselben IP-Adresse sucht, tritt dasselbe Problem auf. Um dies zu beheben, müssen Sie überprüfen, ob es andere Server gibt, die dieselbe IP-Adresse verwenden. Dies kann mit dem arpBefehl erfolgen.

Ich verwende Debian. Hier ist ein Beispiel der Befehle, mit denen ich feststelle, ob ein anderer Server tatsächlich dieselbe IP-Adresse verwendet

apt-get install arp-scan
arp-scan -I eth0 -l | grep 192.168.1.42
  192.168.1.42 d4:eb:9a:f2:11:a1 (Unknown)
  192.168.1.42 f4:23:a4:38:b5:76 (Unknown) (DUP: 2)

Sie werden zwei Sätze von Mac-Adressen bemerken, die dieselbe IP-Adresse verwenden. Vermeiden Sie Konflikte, indem Sie eine andere IP-Adresse festlegen.

Bill Ang
quelle
0

Eine weitere Ursache für die Meldung "Pipe defekt" ist, dass ein anderer Computer versucht, dieselbe IP-Adresse wie Ihr Host zu verwenden.

Ein einfacher Weg, um zu testen, ob jemand anderes diese IP verwendet:

  1. Schalten Sie Ihren Host aus
  2. Pingen Sie dieselbe IP-Adresse, um festzustellen, ob ein anderer Computer diese IP-Adresse verwendet

Um herauszufinden, welche Computer sich in Ihrem Netzwerk befinden, können Sie diesen Unix- und Linux-Fragetitel verwenden: So finden Sie heraus, welche anderen Computer mit dem lokalen Netzwerk verbunden sind .

Josir
quelle