Vraag Hoe opnieuw verbinding te maken met een niet-verbonden ssh-sessie


Is er een manier om verbinding te maken met een ssh-sessie die werd verbroken? We ondervinden problemen met onze netwerkverbinding met een externe site waar we apart aan werken; In de tussentijd ervaren we echter een groot aantal verbroken verbindingen vanwege verloren pakketten terwijl deze op servers op de externe locatie zijn verbonden. Vaak blijft de sessie een tijdje actief, en soms zit het midden in een actie (bewerken van bestanden, uitvoeren van een proces, enz.) Waar ik weer op moet terugkomen in plaats van opnieuw te starten als het mogelijk is.


141
2018-06-04 13:04


oorsprong


Ik kan niet geloven dat niemand het heeft genoemd mosh.mit.edu - jwbensley
@javano: Ik heb er nog nooit van gehoord. Voeg dat toe als een antwoord! - kbyrd
@kbyrd Heb gedaan;) - jwbensley
een vergelijkbare vraag werd gesteld in unix.stackexchange.com/questions/105001/... met enkele hints over hoe je de ontkoppelingen in de eerste plaats kunt omzeilen ... - anarcat


antwoorden:


UPDATE: Zie voor een daadwerkelijk antwoord het antwoord van zero_r hieronder

Dit is geen antwoord, maar een oplossing. Gebruik scherm.

Wanneer u zich voor het eerst aanmeldt, voert u het scherm uit. Je krijgt een andere shell en voert daarin opdrachten uit. Als u niet verbonden bent, houdt het schermproces de terminal in leven, zodat uw shell en de processen die erop worden uitgevoerd niet omvallen. Wanneer u opnieuw verbinding maakt, voert u 'screen -r' uit om verder te gaan.

Er is nog veel meer aan het configureren en gebruiken van het scherm, maar het bovenstaande zou uw probleem moeten omzeilen.


126
2018-06-04 13:08



Of gebruik tmux - een 'koeler' scherm, ik heb beide gebruikt en veel liever tmux omdat je de term mooi kunt splitsen. - John Hunt
Ik was blij om te vinden screen was al op mijn Ubuntu 12.x geïnstalleerd, dus als je het niet zeker weet, probeer dan gewoon deze opdracht opnieuw te verbinden en de doe-versie-upgrade proces: sudo scherm -D-r - bjm88
@ Bjm88, sudo mag alleen worden gebruikt als de oorspronkelijke schermsessie is gestart met sudo. Anders keert het terug alsof er geen schermsessie bestaat: There is no screen to be detached - Noam Manos


Probeer ClientAliveInterval (bijvoorbeeld 60) en TCPKeepAlive (ja of nee) in te stellen op de juiste waarden op het serverside sshd.conf.

Dit zou je sessie in leven moeten houden, zelfs als de verbinding minutenlang verloren gaat.


118
2018-06-04 13:08



Tot nu toe lijkt u de enige die de vraag daadwerkelijk beantwoordt in plaats van het scherm als een tijdelijke oplossing voor te stellen. - kbyrd
Goed gesprek. We hebben geconstateerd dat deze methode bijzonder nuttig is bij het doorlopen van Cisco ASA / PIX-firewalls, die er standaard dol op zijn om time-out verbindingen af ​​te sluiten. - Mike Pountney
Misschien is dit niet de juiste plaats om te vragen, maar is het mogelijk voor de poster om van antwoord te veranderen? We moeten het 'scherm' beantwoorden (de mijne is niet de beste, ik vind Mike Pountney's leuk, maar ik heb de vertegenwoordiger) met deze informatie. - kbyrd
Werkt dit wanneer verbonden via een Cisco VPN-verbinding, en de VPN-verbinding is verloren en hersteld? - Brent
voor mij werkt het scherm perfect, ik kan opnieuw verbinding maken met de gescreende taak en countiune naar het werk - integratorIT


Zoals hierboven vermeld, GNU-scherm is de manier om te gaan. Hiermee kunt u een 'schermsessie' maken op de externe box waarmee u meerdere opdrachten kunt uitvoeren via meerdere 'schermvensters'. Dit zal eenvoudig worden verwijderd als uw ouder-SSH-verbinding sterft, waardoor alle subprocessen die erin worden uitgevoerd, levend en wel blijven functioneren.

'man screen'is je vriend zoals gewoonlijk, en het OS-pakket zou'screen'als het niet standaard is geïnstalleerd.

De basis is:

  • Start een schermsessie (op uw externe host):

    $ screen
    
  • Verbreek de verbinding met uw schermsessie: CTRL-A, d

  • Maak opnieuw verbinding met uw schermsessie nadat u zich weer hebt aangemeld:

    $ screen -d -r
    
  • Open een ander scherm 'venster': CTRL-A, c

  • Doorloop je open schermvensters: CTRL-A, ruimte

Er bestaat veel van leuke dingen die je met Scherm kunt doen. Ik gebruik het al meer dan 10 jaar en ben nog steeds op zoek naar nieuwe functies. Het is mijn favoriete Unix-hulpprogramma.


59
2018-06-04 13:19



Ja, dit is een veel beter antwoord dan het mijne. - kbyrd
Kan ik nog steeds verbinding maken met de niet-verbonden ssh-sessie als ik mijn pc opnieuw start op het scherm? - BarathVutukuri


Ik kan niet geloven dat niemand het heeft genoemd MOSH;

Mosh is een afzonderlijk protocol dat kan inloggen in het SSH-inlogproces, het houdt uw sessie in leven na dagen van ontkoppeling, veranderend IP, hoge latentie enzovoort. Het wordt beter uitgelegd op de startpagina dan ik het kan uitleggen, dus ik heb de onderstaande beschrijving gekopieerd. Mijn ervaringen en advies zijn dat ik het gebruik op mijn Android-mobiel, het is een redder in leven tijdens reizen en SSH'en. Hetzelfde geldt voor mijn laptop wanneer hij bijvoorbeeld met een mobiel op de trein is vastgemaakt. Ik raad aan te compileren vanaf de bron om de nieuwste versie te krijgen, de repoversie voor mij binnen Ubuntu heeft een paar ergernissen die opgelost zijn in de nieuwste versie (op het moment van schrijven).

Mosh (mobiele schaal)

Externe terminal applicatie die roaming mogelijk maakt, ondersteunt intermitterend   connectiviteit, en biedt intelligente lokale echo- en lijnbewerking van   gebruiker toetsaanslagen.

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.

Functies van de website:

  • IP wijzigen. Blijf verbonden: Mosh zwerft automatisch als je beweegt tussen internetverbindingen. Gebruik Wi-Fi in de trein, Ethernet in a hotel en LTE op een strand: u blijft aangemeld. Meeste netwerk programma's verliezen hun verbindingen na roaming, inclusief SSH en Web apps zoals Gmail. Mosh is anders.

  • Zorgt voor zoete dromen: Met Mosh kun je je laptop in de slaapstand zetten en later wakker maken, zodat je je laptop blijft gebruiken verbinding intact. Als uw internetverbinding wegvalt, waarschuwt Mosh u - maar de verbinding wordt hervat wanneer netwerkdienst terugkomt.

  • Weg met netwerkvertraging: SSH wacht op het antwoord van de server voordat hij je zijn eigen typen laat zien. Dat kan zorgen voor een belabberde gebruikersinterface. Mosh is anders: het geeft direct antwoord op typen, verwijderen en lijnbewerking. Het doet dit adaptief en werkt zelfs in volledig scherm programma's zoals emacs en vim. Bij een slechte verbinding zijn uitstekende voorspellingen onderstreept dus je zult niet worden misleid.

  • Geen gepriviligeerde code. Geen daemon: U hoeft niet de superuser te zijn om Mosh te installeren of uit te voeren. De client en server zijn uitvoerbare bestanden worden uitgevoerd door een gewone gebruiker en duren alleen voor de duur van de verbinding.

  • Dezelfde inlogmethode: Mosh luistert niet op netwerkpoorten of authenticeert gebruikers. De mosh-client meldt zich aan bij de server via SSH, en gebruikers presenteren dezelfde inloggegevens (bijv. wachtwoord, openbare sleutel) zoals eerder. Dan runt Mosh de mosh-server op afstand en verbindt er zich via UDP.

  • Loopt in je terminal, maar beter: Mosh is een opdrachtregelprogramma, zoals ssh. Je kunt het gebruiken in xterm, gnome-terminal, urxvt, Terminal.app, iTerm, emacs, screen of tmux. Maar mosh is helemaal opnieuw ontworpen en ondersteunt slechts één tekenset: UTF-8. Het lost Unicode-bugs op in andere terminals en in SSH.

  • Control-C werkt prima: In tegenstelling tot SSH verwerkt het op UDP gebaseerde protocol van Mosh pakketverlies op elegante wijze en stelt het frame in tarief op basis van netwerkomstandigheden. Mosh vult geen netwerkbuffers, dus Control-C
    werkt altijd om een ​​op hol geslagen proces te stoppen.


41
2017-11-24 13:01



Mosh is geen ssh-wrapper - het is een ander protocol, bijna volledig onafhankelijk van ssh (het gebruikt alleen ssh voor inloggen). - jch
+1 Zeer waar, mijn fout. - jwbensley
Hoe zit het met beveiliging, man in het midden? codering? sleuteluitwisseling? - Nasir Iqbal


autossh let op je verbinding en als deze wordt verbroken, wordt opnieuw verbinding gemaakt. Het is betrouwbaarder dan keepers. Als u verbinding maakt met een schermsessie, gaat u verder waar u de verbinding hebt verbroken (zie rscreen dat komt met autossh)


19
2018-06-06 09:11



buiten een configureerbare keep-alive, staat het je niet toe om opnieuw verbinding te maken met een sessie (waar het OP naar op zoek was). maar autossh kan erg nuttig zijn voor apps die ssh-tunnels vereisen, poorttoewijzing, enz. - ives
ja autossh + scherm zou de goede plek zijn. autossh heeft rscreen voor deze. - hayalci
Autossh is beter dan mosh. Ik heb beide gebruikt. - Sridhar-Sarnobat
Hier is een blogpost van Jesse Keating over gebruiken autossh met scherm. - sampablokuper


Ik zou het scherm installeren en starten om je probleem op te lossen. Op het scherm kunt u opnieuw verbinding maken met een vorige schermsessie.

Afgezien van dat, laat het scherm je ook coole dingen doen, zoals je scherm splitsen, de console bekijken enz. Je kunt meer informatie vinden hier en hier.

Om te beginnen, als u de verbinding verbreekt, kunt u gebruiken

screen -ls

om uw sessies te bekijken en

screen -r ${session} 

om opnieuw verbinding te maken met een verbroken verbinding.


9
2018-06-04 13:06





tmux

Deze is een klassieker. Gebruik het wanneer u het risico loopt verbinding met een terminal te verliezen.

$ tmux
$ sh do_something_that_takes_forever

!! Connection fails so you reconnect once you notice

$ tmux ls
0: 1 windows (created Tue Aug 23 12:39:52 2011) [103x30]

$ tmux attach -t 0

Net als dat, ben je weer in actie.


9
2018-04-06 01:24



Heel erg bedankt! Ik was op zoek naar hoe dit met tmux te doen, omdat dat lijkt wat de meeste mensen als de betere optie beschouwen. - CoolOppo