SSH multiplexing på språng

Många SSH-användare använder multiplexing för snabba upp arbetet. Metoden sparar tid men kan orsaka problem när datorn byter eller tappar nätverk. Här finns mina anteckningar med en metod för att undvika låsta sessioner.

Vid varje SSH-anslutning sker handskakning för kryptering och autentisering. Det tar tid och ett riktigt gissel om systemet du ansluter till kräver 2FA. Fördröjningen blir särskilt tydlig för den som ofta öppnar nya terminalfönster mot samma server eller har ett script som utför upprepade anslutningar t.ex för att utföra underhållskommandon.

Lösningen är multiplexing via ControlMaster. Funktionen gör att SSH skapar en socket på den lokala datorn och återanvänder den redan etablerade anslutning för efterföljande sessioner. Det ger en upplevelse av att inloggningen sker ögonblickligen.

Men det finns fallgropar som kan göra arbetet svårare i stället för lättare.

Det vanligaste problemet uppstår när datorn byter nätverk, till exempel när en bärbar dator flyttas från kontoret till hemmet eller när datorn går i viloläge.  Om den ursprungliga anslutningen bryts utan att stängas korrekt finns socketen kvar på klientdatorn. Nästa gång användaren försöker ansluta tror SSH att kontakten fortfarande fungerar. Resultatet blir att terminalen hänger sig och användaren måste vänta på en timeout.

Ett annat problem rör filsystemet. Många operativsystem har en gräns för hur långa sökvägar till filer får vara. En vanlig konfiguration använder serverns namn i filnamnet för socket-filen. Om servernamnet är långt, vilket inte är helt ovanligt i moderna molnmiljöer, misslyckas anslutningen helt.

För att undvika problemen krävs anpassad konfiguration. Den bör innehålla en tidsgräns för hur länge en anslutning får leva och en metod för att hålla filnamnen korta.

Följande steg fungerar för en användare med Macos eller Linux.

1. Skapa en mapp för sockets SSH skapar inte mappen automatiskt. Detta måste göras före konfigurationen läggs in. 

mkdir -p ~/.ssh/sockets

2. Uppdatera konfigurationen Redigera filen ~/.ssh/config. Använd Host * för att reglerna ska gälla alla servrar, eller specificera enskilda värdar.

Host *
    ControlMaster auto
    ControlPath ~/.ssh/sockets/%C
    ControlPersist 10m

I exemplet ovan används %C. Det instruerar SSH att skapa en hash-kod av anslutningsuppgifterna i stället för att skriva ut hela servernamnet. Det garanterar att sökvägen aldrig blir för lång.
 
ControlPersist 10m anger att anslutningen ska hållas öppen i tio minuter efter att sista anslutnigen stängts.

Hantera låsta anslutningar

Även med en bra konfiguration kan en session hänga sig om nätverket är instabilt. Det enklaste sättet att lösa detta är att radera socket-filerna.

Lägg gärna in ett alias i din profilfil (exempelvis .bashrc eller .zshrc) för att snabbt kunna rensa upp.

alias fixssh="rm -f ~/.ssh/sockets/* && echo 'Anslutningar rensade'"

Genom att använda dessa inställningar blir arbetet i terminalen snabbare och stabilare. Ju fler servrar du hanterar, desto större nytta har du av en korrekt uppsatt miljö. 

Tio senaste: