Contents

Hoe een niet-reagerende SSH-sessie afsluiten op Linux

Je bent misschien aan het typen in een SSH-sessie op afstand en plotseling gebeurt er niets. Het systeem lijkt niet te reageren op je toetsaanslagen. Wat doe je?

Het optreden van een vastgelopen of niet-reagerende SSH-sessie kan worden toegeschreven aan verschillende factoren zoals netwerkonderbrekingen, overbelasting van de server of softwarestoringen. Om een niet-reagerende sessie te beëindigen, kunnen verschillende methoden geprobeerd worden, waaronder het geforceerd beëindigen van de verbinding met het commando “kill” in een terminalvenster of door alle geassocieerde verbindingen te sluiten via de applicatie die de SSH-sessie gestart heeft. In sommige gevallen kan het overschakelen naar een alternatief protocol zoals Mosh, dat betere prestaties biedt met zijn aanhoudende tunnels en ingebouwde shell-integratie, een efficiëntere oplossing bieden.

Waardoor bevriezen SSH-sessies?

Een van de belangrijkste redenen waarom SSH-sessies niet meer reageren is het verlies van netwerkconnectiviteit als gevolg van verzwakte Wi-Fi-signalen of het per ongeluk opschorten van het externe apparaat. Zulke voorvallen komen vooral voor bij gebruikers die draagbare computers gebruiken, omdat ze kunnen vergeten om rekening te houden met de lopende sessie als ze hun laptopkleppen sluiten of als ze geen stabiele internetverbinding hebben.

SSH, wat staat voor Secure Shell, werd in eerste instantie ontwikkeld in een tijd waarin mensen niet vaak een laptop gebruikten als hun primaire middel om toegang te krijgen tot netwerkbronnen. Het ontwerp en de functionaliteit van SSH waren op maat gemaakt om optimaal te functioneren in een omgeving waar verbindingen tot stand werden gebracht via fysieke kabels in plaats van draadloze transmissies. Als zodanig wordt het over het algemeen als effectiever beschouwd voor gebruik met bekabelde netwerken in vergelijking met draadloze netwerken.

Beëindigen met een Escape Sequence

/nl/images/ssh-escape-quit.jpg

Als je Secure Shell (SSH) verbinding niet meer reageert of vastloopt, kun je het beste een escape-sequentie gebruiken. Acties die worden uitgevoerd via escape-reeksen zorgen voor communicatie met de SSH-client in plaats van het verre host-apparaat. Het standaard escape-karakter op de OpenSSH-client is het gebruik van het tilde-symbool (~), dat voorafgaat aan elke escape-sequentie.

Om de Secure Shell (SSH) client af te sluiten, kan het tilde-symbool gebruikt worden gevolgd door een punt, dat meestal op dezelfde toetsenbordregel staat als het tilde-symbool.

Je kunt er ook voor kiezen om het escape-teken naar eigen voorkeur aan te passen. Gebruik hiervoor de optie “-e” bij het uitvoeren van het commando. Als alternatief kan deze wijziging permanent worden gemaakt door de parameter “EscapeChar” in het bestand “.ssh/config” in de thuismap op het hostsysteem aan te passen.

Het commando kill gebruiken

/nl/images/ps-grep-ssh.jpg

Als het gebruik van een escape-sequentie geen succes heeft, kan geprobeerd worden de SSH-client te beëindigen door zijn procesidentifier (PID) te identificeren. Dit kan gedaan worden door de uitvoer van het commando “ps” door een zoekopdracht met “grep” te leiden:

 ps aux | grep ssh 

De parameter “aux” in het commando voor het weergeven van processen (“ps”) geeft aan dat alle processen die op het systeem draaien moeten worden weergegeven, ongeacht hun eigenaar en of ze een bijbehorende terminal hebben of niet.

Bij het beheren van meerdere instanties van een Secure Shell (SSH) verbinding kan het lastig zijn om de actieve sessie te identificeren vanwege het gebrek aan visuele indicatoren. Echter, door het logbestand te onderzoeken, dat informatie weergeeft zoals de gebruikersnamen en IP-adressen die aan elke sessie zijn gekoppeld, is het mogelijk om de momenteel actieve instantie te lokaliseren. Om een inactieve sessie te verbreken, voer je simpelweg het commando “kill” uit gevolgd door de Proces ID (PID) van de gewenste beëindiging.

 kill [PID] 

Voor betere SSH verbindingen, gebruik Mosh!

/nl/images/mosh-ssh-vim.jpg

Een betere manier om vervelende bevroren SSH sessies te voorkomen is om Mosh te gebruiken. Als de verbinding wegvalt, laat Mosh je verbonden blijven. Het zal alle berichten versturen wanneer je opnieuw verbinding maakt. Het werkt ook als je je machine in slaapstand zet.

Wanneer je een terminal multiplexer zoals GNU Screen of tmux gebruikt, heb je de mogelijkheid om je SSH sessies in stand te houden en vervolgens te hervatten in het geval van onderbrekingen, waardoor je naadloze connectiviteit hebt. In combinatie met Mosh worden de mogelijkheden echter nog verder uitgebreid, wat resulteert in een geoptimaliseerde gebruikerservaring.

Mosh installeren op Debian en Ubuntu:

 sudo apt install mosh 

En op Arch Linux:

 sudo pacman -S mosh 

Op de Red Hat familie van distro’s:

 sudo dnf install mosh 

Nu kunt u zich ontdoen van vastgelopen SSH-sessies

Mosh biedt een efficiëntere oplossing voor het onderhouden van een actieve SSH-sessie in vergelijking met traditionele methoden zoals het gebruik van escape-sequenties of het gebruik van het “kill”-commando. Deze tool biedt continue connectiviteit ondanks onderbrekingen zoals verbroken verbindingen of perioden van inactiviteit, waardoor herhaalde herauthenticatieprocessen die vaak geassocieerd worden met niet-reagerende SSH-sessies niet meer nodig zijn.