SSH multiplexing på språng

Många SSH-användare använder multiplexing för att 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 kan bli ett problem om systemet du ansluter till kräver tvåfaktorsautentisering. Fördröjningen blir särskilt tydlig för den som ofta öppnar nya terminalfönster mot samma server eller har ett skript som utför upprepade anslutningar för att kö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 anslutningen för efterföljande sessioner. Det eliminerar fördröjningen vid autentisering och ger omedelbar sessionstillgång.

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. Terminalen hänger sig och användaren måste vänta på en timeout.

Ett annat problem rör filsystemet. Unix-domänsocketar har en hård gräns på 104–108 tecken i sökvägen, beroende på operativsystem. En vanlig konfiguration använder serverns namn i filnamnet för socket-filen. Om servernamnet är långt – vilket inte är 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. Gör detta före konfigurationen läggs in.

mkdir -p ~/.ssh/sockets
chmod 700 ~/.ssh/sockets

Rättigheterna 700 säkerställer att bara ägaren kan läsa och skriva i mappen. Det är viktigt: en öppen socket ger full tillgång till fjärrsystemet utan ny autentisering. I en miljö med flera användare innebär felaktiga rättigheter att en lokal angripare kan kapa sessionen.

2. Uppdatera konfigurationen

Redigera filen ~/.ssh/config. Använd Host * för att reglerna ska gälla alla servrar, eller specificera enskilda värdar. Se ssh_config(5) för fullständig dokumentation.

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

I exemplet ovan används %C i stället för det vanligare %h%p%r (värdnamn, port, användarnamn). Skillnaden är att %C skapar en kort SHA1-hash av anslutningsuppgifterna. Det löser problemet med Unix-domänsocketarnas teckenbegränsning – ett långt servernamn som web-server-42.prod.eu-north-1.compute.internal ger annars en sökväg som överstiger gränsen på 104 tecken.

ControlPersist 10m anger att anslutningen ska hållas öppen i tio minuter efter att sista sessionen stängts.

Hantera låsta anslutningar

Även med en bra konfiguration kan en session hänga sig om nätverket är instabilt. Lös problemet genom att radera socket-filerna.

Lägg 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ö.

Kommentarerna är stängda.



Tio senaste: