GNU/Linux >> LINUX-Kenntnisse >  >> Linux

Beheben des Fehlers „Broken Pipe“ mit SSH-Verbindung

Wenn Sie SSH verwenden, um sich mit Remote-Linux-Servern zu verbinden, werden Sie feststellen, dass, wenn Sie Ihre SSH-Sitzung für einige Zeit inaktiv lassen und dann erneut versuchen, die SSH-Sitzung mit einer Fehlermeldung wie der folgenden trennt:

:client_loop: send disconnect: Broken pipe

Auf einigen Systemen wird 'Schreiben fehlgeschlagen:Gebrochene Leitung' oder 'Verbindung vom Remote-Host geschlossen' angezeigt.

Sehen wir uns an, was diesen Fehler verursacht und wie Sie Ihre SSH-Verbindung aufrechterhalten können.

Behebung eines defekten Pipe-Fehlers mit SSH

Wie Sie vielleicht schon erraten haben, wird die SSH-Verbindung wegen Inaktivität geschlossen. Es gibt keinen festgelegten Wert, aber normalerweise etwa 5 Minuten.

Was Sie tun können, um die Trennung der SSH-Sitzung zu vermeiden, besteht darin, eine „Alive-Nachricht“ entweder vom Server an den Client zu senden (ClientAliveInterval ) oder vom Client zum Server (ServerAliveInterval ) in einem bestimmten Zeitintervall.

Auf diese Weise halten Sie die SSH-Sitzung am Leben, da eine Kommunikation zwischen dem Client und dem Server stattfindet und der Server versteht, dass der Client noch da ist.

Nun, es gibt zwei Möglichkeiten, dies zu tun. Entweder Sie senden die Alive-Nachricht vom Client zum Server oder vom Server zum Client.

  • Wenn Sie sich über SSH mit mehreren Servern verbinden, richten Sie es auf Ihrem Computer ein.
  • Wenn Sie ein Systemadministrator sind und mehrere Benutzer sich über häufige SSH-Verbindungsabbrüche beschweren, können Sie dies auf dem Server einstellen.

Methode 1:Clientseitige SSH-Konfigurationsänderung

Nehmen wir an, Sie möchten Ihre SSH-Verbindung mit bis zu 10 Minuten (600 Sekunden) Leerlaufzeit aufrecht erhalten.

Während Sie sich über SSH mit dem Remote-Linux-System verbinden, können Sie das ServerAliveInterval angeben Wert wie folgt:

ssh -o ServerAliveInterval=600 [email protected]_ip_address

Nun, dieses Ding funktioniert, aber die manuelle Eingabe dieser Option jedes Mal, wenn Sie sich mit dem Server verbinden, ist mühsam. Warum nicht dauerhaft?

Ich hoffe, Sie kennen die SSH-Konfigurationsdateien. Auf der Client-Seite können Sie dies nutzen, um bestimmte SSH-Parameter für bestimmte oder alle Verbindungen festzulegen. Ich habe die SSH-Konfigurationsdatei hier ausführlich erklärt.

Stellen Sie zunächst sicher, dass Sie die ssh-Konfigurationsdatei haben. Wenn nicht, erstellen Sie es:

touch ~/.ssh/config

Es ist wichtig, ihm die richtigen Dateiberechtigungen zu erteilen, da sonst beim Herstellen einer Verbindung über SSH der Fehler „Berechtigung verweigert“ auftritt.

Verwenden Sie den Befehl chmod und fügen Sie die folgende Dateiberechtigung hinzu:

chmod 600 ~/.ssh/config

Wenn Sie faul sind oder nicht ins Detail gehen wollen, verwenden Sie diesen Befehl, um das Alive-Intervall auf 600 Sekunden (10 Minuten) einzustellen:

echo "ServerAliveInterval 600" >> ~/.ssh/config 

Dadurch wird der ServerAliveInterval-Wert für alle SSH-Verbindungen, die Sie verwenden, auf 10 Minuten festgelegt. Probieren Sie es aus, wenn Sie möchten.

Wenn Sie es richtiger machen möchten, sollten Sie es wie folgt hinzufügen:

Host *
ServerAliveInterval 600

Methode 2:Serverseitige SSH-Konfigurationsänderung

Die SSH-Konfigurationsdatei für den Server befindet sich normalerweise unter /etc/ssh/sshd_config.

Wenn Sie diese Datei öffnen, finden Sie hier zwei interessante Parameter:

  • ClientAliveInterval : Dies ist die Inaktivitätszeit, nach der der Server eine Alive-Nachricht an den über ssh verbundenen Client sendet.
  • ClientAliveCountMax :Dies ist die Anzahl der Versuche, die der Server unternimmt, um die Alive-Nachricht zu senden.

Angenommen, Sie legen ClientAliveInterval fest auf 200 Sekunden und ClientAliveCountMax bis 3. Dies bedeutet, dass der Server nach 200 Sekunden eine Alive-Nachricht sendet. Wenn vom Client keine Aktivität erfolgt, wird nach 400 Sekunden erneut eine Alive-Nachricht gesendet. Keine Antwort/Aktivität vom Client und eine weitere Alive-Nachricht wird nach 600 Sekunden gesendet. Danach (600 Sekunden) wird die SSH-Verbindung getrennt.

Sie können die /etc/ssh/sshd_config bearbeiten Datei in Ihrem bevorzugten terminalbasierten Texteditor wie Vim. Suchen Sie nach den Einträgen ClientAliveInterval und ClientAliveCountMax. Entfernen Sie die #-Taste am Anfang der Zeilen und geben Sie ihnen den entsprechenden Wert.

Speichern und beenden Sie die Datei.

Bitte stellen Sie das Timeout der SSH-Verbindung nicht auf mehrere Stunden ein. Das wäre Ressourcenverschwendung.

Ich hoffe, dieses Tutorial hat Ihnen geholfen, das Problem mit dem defekten Pipe-Fehler mit der SSH-Verbindung zu beheben. Ihr Feedback ist willkommen.


Linux
  1. WebLogic startet nicht mit dem Fehler „Kein verfügbarer Router zum Ziel“.

  2. So erhöhen Sie das Timeout der SSH-Verbindung

  3. Warum schlägt Rsync mit Broken Pipe (32), Fehler in Socket Io (Code 10) bei Io.c(820) fehl??

  4. SSH-Probleme beheben

  5. Benutzername und Passwort in der Befehlszeile mit sshfs

So verwalten Sie einen Linux-Server mit SSH aus der Ferne

Behebung von HTTP Basic:Zugriff verweigert und schwerwiegender Authentifizierungsfehler mit GitLab

So sperren Sie Ihren CentOS-Server mit IPTables

Generieren Sie RSA-Schlüssel mit SSH mithilfe von PuTTYgen

Melden Sie sich mit einem privaten SSH-Schlüssel auf einem Windows-Client bei einem Linux-Server an

So sichern Sie SSH mit Fail2Ban