# SSH-Verbindung abgebrochen mit "Broken Pipe"

## sprittwicht

Nicht schlagen, ich weiß dass Google eine MENGE Treffer zu dem Thema ausspuckt. Aber die deuten immer auf einen Konfigurationsfehler des sshd hin, der bei mir nicht vorzuliegen scheint.

Vielleicht mach ich mir auch nur wieder'n Kopf wegen nichts, aber trotzdem:

Ich habe mich per ssh auf einem Rechner eingeloggt und dort ein Shellscript gestartet. Dieses Script ruft lediglich ein Java-Programm auf, welches wiederum gewisse Zeit auf der Platte rumrödelt und all paar Minuten eine Ausgabe auf der Konsole erzeugt.

Nachdem längere Zeit keine Ausgabe erfolgt war wurde ich stutzig. Parallel nochmal per ssh eingeloggt, gesehen dass das Script gar nichts mehr tut und dann in der ersten Shell Enter gedrückt, um zu gucken ob überhaupt noch eine Reaktion kommt.

In dem Moment erscheint wieder der Prompt meines lokalen Rechners und die Meldung "Broken pipe". Woher kommt die? Wenn die ssh-Session beendet wurde kann doch nur der sshd des Servers schuld sein, oder irre ich mich? Wenn das Java-Programm oder das Shell-Script in irgendeiner Form Mist gebaut hätten, sollte ich mich bei einer dadurch ausgelösten "broken pipe" doch noch in der laufenden ssh-Session befinden?

Meine Frage: Was kann den Verbindungsabbruch ausgelöst haben? Das Problem hatte ich noch nie, konnte es auch danach nicht mehr reproduzieren. TCPKeepAlive ist wie in der Gentoo-Voreinstellung auskommentiert, sollte also laut manpage aktiviert sein. Ich bin ja auch später nicht mehr aus der Session rausgeflogen, früher wie gesagt auch noch nie.

Muss ich mir wegen irgendwas Sorgen machen oder war das ein einmaliges "kann halt mal passieren" ohne irgendeinen bösen Hintergrund?

----------

## Christian99

Hi, nach meiner Erfahrung ist "broken pipe" immer dann, wenn man längere zeit nix macht, also der server trennt die Verbindung.

Da musst du dann was deiner serverkonfiguration drehen, oder was ich empfehlen kann ist screen. wenn du screen startest wird eine neue Konsolen session aufgemacht, von der du dich "ausklinken" kannst, die aber trotzdem weiterläuft, und zu der du dich dann wieder einklinken kannst. ich verwende das immer, wenn ich per ssh arbeite und was größeres mache, wie update zum Beispiel.

Schöne Grüße

Christian

----------

## Treborius

 *sprittwicht wrote:*   

> 
> 
> Muss ich mir wegen irgendwas Sorgen machen oder war das ein einmaliges "kann halt mal passieren" ohne irgendeinen bösen Hintergrund?

 

mir fallen viele gründe ein, warum der server deine session einfach mal als "invalid" deklariert hat

das du dann eine neue session aufgemacht hast, ändert an der alten ja nicht

----------

## SinoTech

Also das Problem tritt immer dann auf wenn die Verbindung plötzlich weg ist. Zum Beispiel weil du den Netzwerkstecker gezogen hast, eine Switch den Geist aufgibt oder der Router mal wieder seinen 24h-Disconnect hat und sich reconnected.

 *sprittwicht wrote:*   

> 
> 
> [...]
> 
> TCPKeepAlive ist wie in der Gentoo-Voreinstellung auskommentiert, sollte also laut manpage aktiviert sein. 
> ...

 

Wenn ich das richtig verstanden habe erkennt nur der Server dadurch tote Verbindungen und schließt sie. Für den Client ergibt sich da keinen Unterschied.

Cheers,

Sino

----------

## sprittwicht

Erstmal danke für die Antworten.

@Christian99: Konfiguration würde ich ausschließen, da KeepAlive aktiviert sein sollte. Ich habe ja auch schon Sessions wesentlich länger offen gehabt, ohne Tastatureingaben zu senden oder Bildschirmausgaben zurückzukriegen. Ein Timeout kann eigentlich nicht die Ursache sein.

@Treborius: Was denn für Gründe? Hauptsächlich netzwerkbedingte oder kann auch ein Angriff dahinterstehen?

@SinoTech: Der Router hat sich zu der Zeit nicht neu verbunden.

Ich lese aber aus euren Antworten heraus, dass das durchaus normal ist und bei ssh halt schon mal passieren kann?

Meine Sorge war dass vielleicht jemand versucht hat sich in die Verbindung reinzuhängen, meine Session übernommen hat und die Verbindung zu meinem Client deshalb abgewürgt wurde. Ist das möglich / schon mal passiert oder wie sicher ist ssh tatsächlich?

----------

## think4urs11

 *sprittwicht wrote:*   

> Ich lese aber aus euren Antworten heraus, dass das durchaus normal ist und bei ssh halt schon mal passieren kann?
> 
> Meine Sorge war dass vielleicht jemand versucht hat sich in die Verbindung reinzuhängen, meine Session übernommen hat und die Verbindung zu meinem Client deshalb abgewürgt wurde. Ist das möglich / schon mal passiert oder wie sicher ist ssh tatsächlich?

 

Nö das ist nicht 'normal'. Könnte aber z.B. durch eine 'wackelige' WLan-Strecke verursacht werden oder andere alternde  Geräte wo mal ein Bit umkippt.

Ich setze grundsätzlich sämtliche keepalives die SSH-Server wie Client anbieten auf aktiv. Damit habe ich bisher nie unerklärliche Abbrüche gesehen.

Sofern du nur ssh2 (also auch nicht 2,1) benutzt sollte es ausreichend sicher sein - no password-auth, root-login und Co. sollten natürlich entsprechend gesetzt sein. Theoretisch könnte man von außen deine Session noch via RST zurücksetzen, in der Praxis dürfte das aber eher selten bis nie auftreten.

----------

## schachti

Vielleicht eine zu "scharf" eingestellt Firewall, die die Verbindung für tot erklärt und getrennt hat. Probier mal die Option ServerAliveInterval.

----------

## Treborius

 *sprittwicht wrote:*   

> 
> 
> Was denn für Gründe? Hauptsächlich netzwerkbedingte oder kann auch ein Angriff dahinterstehen?
> 
> 

 

eher Netzwerk-Gründe, der Server setzt deine Verbindung zurück, aber der Client bekommt davon nichts mit

==> client meldet "broken pipe" 

bestes beispiel : 

du meldest dich auf einem rechner an, machst dann ein

```

# shutdown -h now

```

dann wird der server gekillt, sagt aber dem client nichts davon, und dann

müsstest du eigentlich genau die meldung bekommen

einen angriff kann ich mir dahinter nicht vorstellen

edit :

 *schachti wrote:*   

> Vielleicht eine zu "scharf" eingestellt Firewall, die die Verbindung für tot erklärt und getrennt hat. Probier mal die Option ServerAliveInterval.

 

oder sowas, wenn zB ein router zwischen dir und dem server steht, dann muss dieser ja die verbindung nachverfolgen

(connection tracking)

da wird auch ein timeout eingestellt sein

==> verbindung wird nach langer inaktivität als invalid gekennzeichnet

==> broken pipe

----------

