Små tricks med SSH

I denne artikel samles vores bedste metoder til en mere effektiv brug af SSH. Her vil du lære at:

  • Tilføje en anden faktor til SSH-login
  • Sikkert bruge agent forwarding
  • Forlade en fastlåst SSH-session
  • Holde en permanent terminal åben
  • Dele en fjern terminalsession med en ven (uden Zoom!)

Tilføje en anden faktor til din SSH

En anden autentifikationsfaktor til dine SSH-forbindelser kan tilføjes på fem forskellige måder:

  1. Opdater din OpenSSH og brug en krypteringsnøgle. I februar 2020 blev understøttelse af FIDO U2F (Universal Second Factor) krypteringsnøgler tilføjet til OpenSSH. Dette er en fantastisk ny funktion, men der er en nuance: kun de klienter og servere, som er blevet opdateret til version OpenSSH 8.2 og nyere, vil kunne bruge krypteringsnøglerne, da februaropdateringen introducerer nye nøgletyper for dem. Med kommandoen ssh –V kan du kontrollere SSH-klientversionen, og serverversionen med kommandoen nc [servername] 22

    Den februaropdaterede version tilføjede to nye nøgletyper — ecdsa-sk og ed25519-sk (sammen med de tilsvarende certifikater). For at generere nøglefilen er det tilstrækkeligt at indsætte din krypteringsnøgle og køre kommandoen:
    $ ssh-keygen -t ecdsa-sk -f ~/ .ssh/id_ecdsa_sk

    Denne vil oprette offentlige og hemmelige nøgler og knytte dem til din U2F-enhed. Opgaven for den hemmelige nøgle på U2F-enheden er at dekryptere den hemmelige nøglebeskrivelse på disken, når krypteringsnøglen er aktiveret.

    Derudover kan du som anden faktor give en adgangskode til dine nøgler.

    Resident Key er en anden OpenSSH-understøttet type generering af -sk-nøgler. Med denne tilgang gemmes beskrivelsen på U2F-enheden, og det tillader dig at have den tilgængelig, når krypteringsnøglen er nødvendig. En resident key kan oprettes med kommandoen:

    $ ssh-keygen -t ecdsa-sk -O resident -f ~/ .ssh/id_ecdsa_sk

    Derefter, for at få beskrivelsen tilbage i hukommelsen på en ny enhed, indsæt krypteringsnøglen og kør kommandoen:

    $ ssh-add -K

    Når du opretter forbindelse til værten, skal du stadig aktivere krypteringsnøglen.

  2. Brug af PIV+PKCS11 og Yubikey. For at oprette forbindelse til enheder med ældre versioner af SSHD ved hjælp af en krypteringsnøgle kræves en anden tilgang. Yubico har en vejledning til brug af U2F+SSH med PIV/PKCS11 (eng). Dette er ikke det samme som FIDO U2F, og selvom metoden virker, kræver det en stor indsats at finde ud af, hvilken magi der driver den.
  3. Anvend brugerdefineret yubikey-agent ssh-agent. Filippo Valsorda har skrevet en SSH-agent til Yubikeys. Den er helt ny og indeholder minimumsfunktioner.
  4. Brug Touch ID og sekey. Sekey er en SSH-agent med åbent kildekode, der gemmer hemmelige nøgler i en beskyttet enclave på din Mac og giver mulighed for at bruge Touch ID til adgang.
  5. Brug Single Sign On SSH. Jeg har skrevet en tutorial for at hjælpe med at konfigurere denne metode (engelsk). En af fordelene ved single sign on SSH er muligheden for at implementere sikkerhedspolitikker fra din udbyder af identiteter — herunder støtte til multifaktorautentifikation (MFA).

Sikker brug af agent forwarding

I SSH giver agent forwarding en fjernværts adgang til SSH-agenten på dit lokale device. Når du bruger SSH med aktiveret agent forwarding (normalt via ssh -A), vil der være to kanaler i forbindelsen: din interaktive session og kanalen til agent forwarding. Gennem denne kanal forbindes en Unix-socket, der er oprettet af din lokale SSH-agent, til den fjerne værtsmaskine. Dette er en risikabel metode, da en bruger med root-adgang på den fjerne enhed kan få adgang til din lokale SSH-agent og potentielt udgive sig for dig på netværket. Ved at bruge den standard SSH-agent, der følger med Open SSH, vil du ikke engang vide, at det er sket. At have en U2F-nøgle (eller Sekey) vil effektivt hjælpe med at blokere enhver forsøg på at udnytte din SSH-agent udefra.

Selv med denne sikkerhedsforanstaltning vil det være en god idé at bruge agent forwarding så sjældent som muligt. Brug det ikke til hver session — anvend agent forwarding kun når du er sikker på dets nødvendighed for den aktuelle session.

Udførsel fra en hængende session

Netværksafbrydelser, ukontrolleret programadfærd, eller en kontrolsekvens, der blokerer for tastaturindput — alle disse er mulige årsager til, at en SSH-session kan brydes.

Du kan afslutte en hængende session på flere måder:

  1. Automatisk afslutning ved netværksafbrydelse. I din .ssh/config skal du tilføje følgende:
    ServerAliveInterval 5
    ServerAliveCountMax 1

    ssh sender echo til den fjerne værtsmaskine hvert ServerAliveInterval sekunder for at tjekke forbindelsen. Hvis der ikke modtages svar inden for ServerAliveCountMax echoer, afslutter ssh forbindelsen af timeout og forlader sessionen.

  2. Forlad sessionen. SSH bruger som standard tegnet ~ (tilde) som kontroltegn. Kommandoen ~. lukker den åbne forbindelse og bringer dig tilbage til terminalen. (Kontrolsekvenser skal indtastes på en ny linje.) Kommandoen ~? viser en komplet liste over de tilgængelige kommandoer i denne session. Vær opmærksom på, at det kan kræve at trykke på ~-tasten to gange på internationale tastaturer for at indtaste tegnet ~.

Hvorfor opstår der overhovedet hængte sessioner? I internettets tidlige dage bevægede computere sig sjældent. Når du bruger bærbare computere og skifter mellem flere IPv4 WiFi-netværk, ændres din IP-adresse. Da SSH er afhængig af TCP-forbindelser, som igen er afhængig af en endepunkt med en stabil IP-adresse, går dine SSH-forbindelser tabt hver gang du skifter netværk, da de mister socket-deskriptoren. Når din IP-adresse ændres, kræver det tid for din netværksstak at opdage tabet af deskriptoren. Når der opstår netværksproblemer, ønsker vi ikke, at en af noderne i TCP-forbindelsen afslutter forbindelsen for tidligt. Derfor vil protokollen forsøge at sende data igen et par gange, før den til sidst giver op. I mellemtiden vil din session i terminalen se ud til at være hængt. IPv6 tilføjer flere mobilitetsrelaterede funktioner, der gør det muligt for enheden at bevare sin hjemmeadresse under netværksændringer. Måske vil dette en dag ikke være så stort et problem.

Hvordan holder man en konstant terminal åben på en fjernnode

Der er to forskellige tilgange til, hvordan man bevarer forbindelsen, når man skifter mellem forskellige netværk eller ønsker at være frakoblet i kort tid.

1. Brug Mosh eller Eternal Terminal

Hvis du virkelig har brug for en forbindelse, der ikke falder ud, selv når du skifter mellem netværk, så brug mobilskallet Mosh. Det er en sikker skal, der først bruger SSH-håndtryk og derefter skifter til sin egen krypterede kanal under hele sessionen. På den måde skaber Mosh en separat, meget robust og sikker kanal, der kan modstå såvel internetafbrydelser som ændringer af din bærbare computers IP-adresse, alvorlige netværksbrud og meget mere – og alt dette takket være magien ved UDP-forbindelser samt den synkroniseringsprotokol, som Mosh anvender.

For at bruge Mosh skal du installere det både på klienten og serveren og åbne porte 60000-61000 for ubestemt UDP-trafik til din fjerne vært. Herefter er det tilstrækkeligt at bruge mosh user@server.

Mosh arbejder på niveau med skærme og tastetryk, hvilket giver det flere fordele i forhold til at sende en binær strøm af standard input og output mellem klienten og SSH-serveren. Hvis vi kun skal synkronisere skærme og tastetryk, bliver det senere meget lettere at genoprette en afbrudt forbindelse. Mens SSH vil bufferere og sende alt, hvad der er sket, er det kun nødvendigt for Mosh at bufferere tastetryk og synkronisere det sidste billede af terminalvinduet med klienten.

2. Brug tmux

Hvis du vil "komme og gå, når det passer dig" og holde en terminalsession på den fjerne node, så benyt terminalmultiplexer tmux. Jeg elsker tmux og bruger det hele tiden. Hvis din SSH-forbindelse er afbrudt, er det bare at genoprette forbindelsen og indtaste tmux attach. Derudover har det fantastiske funktioner såsom interne terminalfaner og paneler, der ligner fanerne i iOS-terminalen, samt muligheden for at dele terminaler med andre.

Nogle kan lide at pynte deres tmux med Byobu, et pakkesystem, der væsentligt forbedrer brugervenligheden af tmux og tilføjer mange genvejstaster. Byobu leveres sammen med Ubuntu og er nemt at installere på Mac via Homebrew.

Opdeling af en fjern terminalsession med en ven

Nogle gange, når man fejlsøger komplekse problemer på dine servere, kan man få lyst til at dele en SSH-session med nogen, der ikke er i samme rum som dig. tmux er perfekt til denne opgave! Det kræver kun et par enkle trin:

  1. Sørg for, at tmux er installeret på din bastion-node eller på en server, du planlægger at arbejde med.
  2. I skal begge logge ind via SSH til enheden ved hjælp af en enkelt konto.
  3. En af jer skal starte tmux for at oprette en tmux-session.
  4. Den anden skal køre tmux attach.
  5. Voilà! I har en fælles terminal.

Hvis du ønsker mere avancerede multi-bruger tmux-sessioner, så prøv tmate, det er en fork af tmux, der gør det betydeligt lettere at samarbejde i terminalsessioner.

Kilde: habr.com

Køb pålidelig webhosting med DDoS-beskyttelse, VPS VDS-servere 🔥 Køb pålidelig webhosting med DDoS-beskyttelse, VPS VDS-servere | ProHoster