Vraag Hoe te voorkomen "Write Failed: broken pipe" op SSH-verbinding?


Wat kan ik doen om SSH op zowel client als servers te configureren om te voorkomen Write Failed: broken pipe fouten? Dit gebeurt vaak als u op uw clientcomputer slaapt en later weer verdergaat.


232
2018-04-28 23:36


oorsprong


Eigenlijk niets. De sessie werd onderbroken en de beveiliging van de sessie was in gevaar. Als je de computer niet in de sluimerstand zet, kun je ervoor zorgen dat de cliënt de tijd blijft vrijmaken om de hartslag op de server te houden, maar als het systeem gaat slapen, is er niets dat kan worden gedaan. - darkdragn
In dit geval ben ik op zoek naar iets dat me in staat zou stellen om een ​​verbroken ssh-verbinding opnieuw op te starten (waarschijnlijk gebaseerd op de exit-code) en te herstellen met screen? - sorin
Jullie mensen hebben ongelijk: ik heb TWEE desktop-clientmachines die verbinding maken met de SAME-server. De ene is ubuntu 12.10, Quantal, wiens SSH-client goed werkt, en houdt de verbinding urenlang. De andere is Ubuntu 14.10, Utopic, net naast de andere en in een nieuwe installatie; na een paar minuten blokkeert het zichzelf met dit bericht. De rest van de netwerkfuncties in het apparaat worden niet onderbroken. Dus nee, het is geen netwerkprobleem, noch een serverprobleem, maar een specifiek SSH CLIENT softwareprobleem, dat kan worden opgelost, in tegenstelling tot wat 'darkdragan' durft te zeggen, dat 'niets kan worden gedaan'. - David L
En inderdaad, zoals ik al zei: mensen praten te veel als ze zeggen "niets kan worden gedaan", net als @darkdragn durfde. Ik las het antwoord van Aram Kocharyan, en ik heb het toegepast: 20 minuten geleden ... Ik besefte dat ik in mijn oude Quantum Ubuntu 12.10 die instructie had toegepast in dat bestand [ik heb zojuist gecheckt], twee jaar geleden, en dat was de reden van de stabiliteit aldaar. Ik deed het hier, en in deze laatste 20 minuten is de verbinding sindsdien stabiel. Dus alsjeblieft, mensen: onthoud jezelf wanneer je durft te denken dat "niets kan worden gedaan", en onthoud zelfs nog meer wanneer je probeert die boodschap aan andere mensen over te laten. - David L
@DavidL je zou de vragen beter moeten lezen voordat je gaat roddelen. Uw probleem is niet hetzelfde als die van de OP's, die duidelijk aangeven dat de computer in slaap is gevallen. Dat trouwens slechts een van de antwoorden adres ("mosh"), en het werd geplaatst 2 jaar na de vraag. De andere antwoorden doen echter het beste, namelijk oplossingen voorstellen voor zaken die gemakkelijker kunnen worden opgelost, zoals de uwe. Chill out, wees niet zo gestrest, razernij doet hier niets goeds ... - msb


antwoorden:


Ik heb dit geprobeerd /etc/ssh/ssh_config voor Linux en Mac:

Host *
ServerAliveInterval 120

Dit is hoe vaak, in seconden, het een waarschuwingsbericht naar de server moet sturen. Als dat niet werkt, train dan een aap om elke twee minuten te drukken terwijl je werkt.

Je zou een van beide kunnen instellen ServerAliveInterval in /etc/ssh/ssh_config van de clientcomputer of ClientAliveInterval in /etc/ssh/sshd_config van de servermachine. Probeer het interval te verkleinen als u nog steeds de foutmelding krijgt.

Configuratie voor een enkele gebruiker kan in een bestand worden ingesteld ~/.ssh/config zowel aan de server als aan de clientzijde. Zorg ervoor dat het bestand de juiste machtigingen heeft chmod 644 ~/.ssh/config.


211
2018-05-26 11:49



Ja, ik doe hetzelfde en het werkt best goed voor de meeste dingen. - Oli♦
Ik ben niet op een Mac, maar Ubuntu 12.04 en het bestand voor dit besturingssysteem lijkt ook ~ / .ssh / config te zijn. - H2ONaCl
OS X 10.8.4 geeft een foutmelding Bad configuration option: ClientAliveInterval - ohho
Ik krijg hetzelfde Bad configuration option fout op OSX 10.8.4. - Nick Heiner
Over het algemeen plaats je deze twee commando's in verschillende delen van het systeem. Alleen ServerAliveInterval aan de OSX-clientzijde ... en alleen ClientAliveInterval op het sshd-configuratiebestand ... - ftrotter


SSH-sessies kunnen breken vanwege talrijke en mogelijk onvermijdelijke redenen.

Een handig hulpprogramma dat kan worden gebruikt om problemen veroorzaakt door dit te verminderen, wordt genoemd screen. Het scherm is een krachtig hulpprogramma waarmee je meerdere terminals kunt bedienen die onafhankelijk van de ssh-sessie in leven blijven. Bijvoorbeeld als u rent screen in een ssh-sessie ziet u een nieuwe terminal geopend en kunt u die gebruiken om taken uit te voeren. Laten we zeggen dat je ssh-sessie in het proces sterft. hardlopen screen -d dan screen -r zal de laatste sessie opnieuw openen en u kunt vanaf daar verder gaan. Zorg ervoor dat je leest een deel van de documentatie voor gebruik.


70
2017-10-04 16:28



Dit is waarschijnlijk het beste antwoord, ik weet niet zeker waarom het niet hoger wordt gestemd. De andere "fixes" zijn nuttig in het speciale geval waarin u daadwerkelijk om het onderhoud van een SSH-verbinding zou willen geven, maar in de meeste gevallen denk ik dat de echte zorg is dat de beoogde processen blijven draaien, ongeacht welke client / server-verbindingsproblemen dan ook . - Paul McMurdie
Ik zou ook toevoegen tmux als alternatief voor scherm. Ik vind het veelzijdiger en stabieler dan het scherm. - fridaymeetssunday
dit hier gewoon achterlaten voor toekomstig gebruik - u kunt gemakkelijk rennen screen -d -r om je laatste sessie te herstellen. - doplumi
Of gewoon screen -dr. Of screen -x afhankelijk van wat je van plan bent te doen. Het punt is dat je moet weten wat al die schakelaars doen, zodat je de juiste kunt gebruiken en niet alleen de suggesties van internetmensen blindelings kunt volgen. Er is een mooie compacte samenvatting beschikbaar hier: ss64.com/bash/screen.html - flith


Client configuratie

Probeer het bestand aan te maken:

~/.ssh/config

Voeg de inhoud toe:

Host *
  ServerAliveInterval 30
  ServerAliveCountMax 5

Nu ssh naar uw server en kijk of uw probleem is opgelost. ClientAliveInterval optie is alleen handig bij het configureren van de ssh-server (ook bekend als sshd), het verandert niets aan de ssh-clientzijde, dus gebruik het niet in het bovenstaande configuratiebestand.

Dit stuurt een hallo-daar-je-signaal naar de server als er de afgelopen 30 seconden geen pakketten zijn ontvangen (zoals hierboven gespecificeerd). Als het aantal opeenvolgende hallo-is-u-daar-signalen echter ServerAliveCountMax bereikt, zal ssh de verbinding met de server verbreken. Deze waarde is standaard ingesteld op 3 (dus 3 * 30 = 90 seconden zonder serveractiviteit), verhoog deze waarde als deze aan uw behoeften voldoet. Er zijn veel meer configuratie-opties voor het .ssh / config-bestand en je zou kunnen lezen:

Gebruik een SSH-configuratiebestand

Voor meer informatie over andere opties. U wilt dit misschien niet toepassen op elke server waarmee u verbinding maakt, zoals in dit voorbeeld. Of beperk het tot slechts een bepaalde server door de lijn te vervangen Host * met Host <IP> (vervang door een IP-adres, zie ssh_config man pagina).

Server configuratie

Op dezelfde manier kunt u de server vertellen dat hij voorzichtig moet zijn met uw klanten. Het configuratiebestand is /etc/ssh/sshd_config.

ClientAliveInterval 20
ClientAliveCountMax 5

U kunt het deactiveren door in te stellen ClientAliveInterval naar 0 of tweak ClientAliveInterval en ClientAliveCountMax om een ​​maximale ssh-client inactief te maken zonder op de sondes te reageren. Een voordeel van deze instellingen ten opzichte van TCPKeepAlive is dat de signalen via de gecodeerde kanalen worden verzonden, waardoor het minder waarschijnlijk is dat ze spoofbaar zijn.


40
2017-10-06 02:54



Het werkt niet. Ik zie opnieuw dezelfde fout. - user997704
Probeer het rechtstreeks vanaf de opdrachtregel en ga lager: ssh -o ServerAliveInterval = 5 gebruiker @ host - Matt
Ik heb dat ook geprobeerd ... werkt niet. Ik weet echt niet wat er met mijn systeem aan de hand is - user997704
Het is ClientAliveCountMax, NOT ClientAliveMaxCount - David G
@DavidG Bewerk het antwoord met uw correcties. - CivMeierFan


Ik ben op afstand een Ubuntu-server opwaarderen van lucide naar nauwkeurige en verloor de ssh-verbinding in het midden van de upgrade met het bericht "Schrijven mislukt Brocken-pijp". ClientAliveInterval en ServerAliveInterval hebben niets gedaan. De oplossing is om TCPKeepAlive-opties in client-ssh in te schakelen:

TCPKeepAlive yes

in

/etc/ssh/ssh_config

22
2017-10-07 18:40





Voor de client, bewerk je ~/.ssh/config (of /etc/ssh/ssh_config) bestand als volgt:

Host *
  TCPKeepAlive yes
  ServerAliveInterval 120

TCPKeepAlive - Geeft aan of het systeem TCP-keepalive moet verzenden   berichten naar de andere kant. Als ze worden verzonden, de dood van de verbinding   of crash van een van de machines zal goed worden opgemerkt. Echter,   dit betekent dat verbindingen zullen sterven als de route tijdelijk niet beschikbaar is,   en sommige mensen vinden het vervelend (de standaardinstelling is 'ja').

ServerAliveInterval - Stelt een time-outinterval in seconden in waarna   als er geen gegevens van de server zijn ontvangen, verzendt ssh (1) een   bericht via het gecodeerde kanaal om een ​​antwoord van de   server. De standaardwaarde is 0, wat aangeeft dat deze berichten dat niet zijn   verzonden naar de server.


Bewerk de uwe voor de server /etc/ssh/sshd_config als:

ClientAliveInterval 600
ClientAliveCountMax 0

Als u wilt dat de ssh-client na 10 minuten (600 seconden) automatisch stopt (time-out).

ClientAliveCountMax - Dit geeft het totale aantal controles aan   bericht verzonden door de ssh-server zonder antwoord van de   ssh-client. Standaard is 3.

ClientAliveInterval - Dit geeft de time-out in seconden aan. Na x   aantal seconden, stuurt ssh-server een bericht naar de klant met de vraag   voor reactie. Deafult is 0 (server stuurt geen bericht naar client naar   controleren.).


Zie ook: Wat doen de opties ServerAliveInterval en ClientAliveInterval in sshd_config doen, precies?


18
2017-10-02 13:52





Ik ben helemaal weg van Mosh. Ik schuif regelmatig een server in, sluit mijn laptop en ga naar een café, open het en ga door alsof er niets is veranderd.

Mosh (mobiele schaal)

Remote terminal-applicatie die het toelaat roamen, ondersteunt periodieke   connectiviteit, en biedt intelligent lokaal   echo en lijnbewerking van toetsaanslagen van gebruikers.

Mosh is een vervanging voor SSH. Het is robuuster en responsiever,   vooral via wifi, mobiele verbindingen en verbindingen over lange afstanden.

Mosh is gratis software, beschikbaar voor GNU / Linux, FreeBSD, Solaris, Mac OS X en Android.


15
2017-09-30 18:48





Voor mij kreeg ik Write failed: Broken pipe zelfs toen ik actief aan het typen was in vim of op de shell prompt. Ik kon ook een tijdje niet op internet rondkijken. (Ik verbond op afstand met Ubuntu via Terminal.)

Anderen in mijn netwerk streamen veel video van Netflix en andere plaatsen. Ik kan het niet bewijzen, maar ik vermoed dat het een ISP- of routerprobleem is. Verizon en Netflix wijzen elkaar bijvoorbeeld op de netwerkproblemen van hun klanten.

Als je een inbelverbinding hebt en video of muziek streamt met een gelijktijdige SSH- of telnet-verbinding, is het onvermijdelijk dat je op een bepaald moment een bericht krijgt met een kapotte pijp. Het upgraden van mijn ISP's breedbandpakket leek mijn verbroken verbinding minder frequent te maken.


4
2017-07-30 13:33