it-swarm.com.de

Schreiben fehlgeschlagen: gebrochene Pipe

Ich habe einen Ubuntu-Server ohne Kopf. Ich habe einen Befehl auf dem Server (Snapraid Sync) über SSH von meinem Mac ausgeführt. Der Befehl sagte, es würde ungefähr 6 Stunden dauern, also ließ ich es über Nacht stehen. 

Als ich heute morgen runterkam, sagte das Terminal auf dem Mac: "Write failed: broken pipe"

Ich bin nicht sicher, ob der Befehl vollständig ausgeführt wurde. Ist dies ein Timeout-Problem? Wenn ja, wie kann ich die SSH-Verbindung über Nacht am Leben erhalten?

40
Garry Pettet

Dies sollte das Problem für die Mac OSX-Version beheben: 10.8.2

hinzufügen:

ServerAliveInterval 120
TCPKeepAlive no

zu dieser Datei:

~/.ssh/config

Oder, wenn Sie möchten, dass es eine globale Änderung im SSH-Client ist, in diese Datei

/ private/etc/ssh_config

"ServerAliveInterval 120" besagt im Wesentlichen, dass der Server alle 120 Sekunden mit einem NULL-Paket "ping" wird, und "TCPKeepAlive no" bedeutet, die SO_KEEPALIVE-Socket-Option nicht festzulegen (da dies nicht der Fall sein sollte, wenn ServerAliveInterval bereits eingestellt ist und offensichtlich "spoofable" ist "oder etwas ungerade).

Die Server haben in ähnlicher Weise etwas, das sie für denselben Effekt einstellen könnten (ClientKeepAliveInterval), aber normalerweise haben Sie diese Einstellungen nicht so sehr im Griff.

45
jeremyforan

Sie können dafür "screen" verwenden. Stellen Sie einfach eine Verbindung zum Server über SSH her, starten Sie die Bildschirmsitzung durch Ausführung des Befehls "screen", starten Sie Ihren Befehl dort und trennen Sie die Verbindung (beenden Sie die Bildschirmsitzung nicht). Wenn Sie der Meinung sind, dass Ihr Befehl bereits erledigt ist, können Sie eine Verbindung zum Server herstellen und eine Verbindung zu Ihrer Bildschirmsitzung herstellen, wo Sie das Ergebnis/den Fortschritt der Befehlsausführung sehen können (falls dies der Fall sein sollte).

Siehe "Man Screen" für weitere Details.

22
gumkins

Dies sollte das Problem für Ubuntu und Linux Mint .__ beheben.

ServerAliveInterval 120
TCPKeepAlive yes

to/etc/ssh/ssh_config datei

5
Subrata Mal

Anstelle des Bildschirms würde ich tmux empfehlen, einen (wohl) besseren Mitbewerber Bildschirm

tmux new-session -s {name}

Dieser Befehl erstellt eine Sitzung. Sie können jederzeit danach eine Verbindung herstellen:

tmux a -t {name}
4
jmvbxx

es gibt zwei Lösungen

  1. Um den Server zu aktualisieren und den Server sshd neu zu starten

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

  1. Client aktualisieren

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

2
Spirit

Wenn Sie nach der Bearbeitung von/etc/ssh/sshd_config immer noch Probleme haben oder wenn ~/.ssh/config .__ auf Ihrem Computer nicht vorhanden ist, empfehle ich dringend, eine Neuinstallation von ssh durchzuführen. Diese Lösung dauerte etwa eine Minute, um sowohl die Fehler "Broken Pipe" als auch "Closed by Remote Host" anzuzeigen.

Sudo apt-get purge openssh-server

Sudo apt update

Sudo apt install openssh-server
1

Nachdem versucht wurde, viele der obigen Parameter in sshd_config (ClientAliveInterval, ClientMaxCount, TCPKeepAlive ...) zu ändern, hat sich nichts geändert. Ich habe Stunden und Tage damit verbracht, in Foren und Blogs nach einer Lösung zu suchen ...

Es scheint, dass das Problem der Rohrbruchstelle, das die Verbindung mit ssh/sftp verbietet, auf die Berechtigungseinstellungen von ChrootDirectory zurückzuführen ist. Das ChrootDirectory muss im Besitz von root/root mit der Berechtigung 755 sein niedrigere Berechtigungen 765/766/775 ... funktioniert nicht, aber Stärker (z. B. 700) , wenn Sie schreiben müssen Berechtigung für einen verbundenen Benutzer. Sie können es in Unterverzeichnissen vergeben. Wenn Chroot von sftpUser: sftpGroup gehört, funktioniert es auch nicht ...

chroot-> root:root 755
| 
---subdirectories-> sftpUser:sftpGroup 700 up to 770 

hoffe es würde helfen

0
David

die Antwort von jeremyforan ist korrekt, aber ich habe festgestellt, dass, wenn Sie versuchen, scp zu verwenden, es explizit auf eine wie beschrieben konfigurierte Konfigurationsdatei verweisen muss, die scheinbar nicht der normalen Hierarchie von config entspricht. Zum Beispiel:

scp -F ~/.ssh/config myfile [email protected]:~

funktioniert, während das Weglassen von -F immer noch zu einem Fehler in der Rohrleitung führt.

0
Max Mammel