Modul 2 · 2.3
Brug SSH smart
Modul 2: SSH og nøgler · Læsetid: 10 minutter
Læringsmål: Efter denne lektion kan du bruge SSH smart i hverdagen med din egen konfigurationsfil, kopiere filer med scp og rsync og nå en database via en tunnel, uden at databaseporten skal være åben mod internettet.
Centrale begreber: ~/.ssh/config, Host, HostName, User, IdentityFile, scp, rsync, sftp, port forwarding, -L, tunnel, ProxyJump, ServerAliveInterval, andet portnummer, tilbagekald en nøgle
Skriv mindre med ~/.ssh/config
Efter et par uger skriver du dette snesevis af gange om dagen:
anna@laptop:~$ ssh -i ~/.ssh/id_ed25519 anna@192.0.2.10Med en konfigurationsfil til klienten bliver det kortere, og du laver færre fejl. Filen ligger på din egen computer: ~/.ssh/config (Windows: C:\Users\anna\.ssh\config, uden filtype).
Host web1
HostName 192.0.2.10
User anna
IdentityFile ~/.ssh/id_ed25519
ServerAliveInterval 60
Host test
HostName test.example.com
User anna
Port 2222Nu er det bare:
anna@laptop:~$ ssh web1
anna@web1:~$Hvad gør linjerne?
- Host er det kaldenavn, du selv vælger. Du skriver det efter
ssh,scpogrsync. - HostName er den rigtige adresse: en IP-adresse eller et navn, der står i DNS.
- User og Port er brugernavnet og porten, så du ikke længere skal huske dem.
- IdentityFile peger på nøglen. Praktisk, hvis du har flere nøgler; uden denne linje prøver ssh dine standardnøgler.
- ServerAliveInterval 60 sender hvert 60. sekund et lille livstegn. Mange hjemmeroutere og wifi-netværk afbryder en stille forbindelse efter et par minutter; med denne linje forbliver din session åben.
Også her gælder det, at den første værdi tæller, ligesom på serveren. Sæt derfor generelle regler som Host * nederst i filen.
Kopiér filer: scp, rsync og sftp
scp kopierer en fil, i samme form som cp, men med host: foran:
anna@laptop:~$ scp backup.sql web1:/home/anna/
anna@laptop:~$ scp web1:/var/log/nginx/error.log .rsync er smartere til mapper og store mængder: den sender kun det, der er ændret, og kan genoptage en afbrudt kopiering. Den skal være installeret i begge ender (apt install rsync).
anna@laptop:~$ rsync -avz --progress ./site/ web1:/var/www/example.com/Læg mærke til skråstregen efter ./site/: med skråstreg kopierer rsync mappens indhold, uden skråstreg selve mappen (så får du /var/www/example.com/site/). Prøv først med --dry-run, hvis du er i tvivl, og vær meget forsigtig med --delete, som i den modtagende ende sletter alt, der ikke findes hos dig.
sftp og grafiske programmer som FileZilla eller WinSCP bruger den samme SSH-forbindelse og den samme nøgle. Du har altså ikke brug for en separat FTP-server. En gammeldags FTP-server på en VPS frarådes: almindelig FTP sender din adgangskode ukrypteret over netværket.
En tunnel i stedet for en åben port
Dette er måske det mest nyttige, SSH kan. Forestil dig: på din server kører en PostgreSQL-database. Du vil tilgå den fra din laptop med et grafisk program. Fristelsen er stor til at åbne port 5432 mod internettet. Lad være: åbne databaseporte er en af de største årsager til databrud (lektion 10.2), og kurset kontrollerer senere udefra, at de er lukkede (opgave Z5.1).
Med lokal port forwarding lader du SSH lave en tunnel:
anna@laptop:~$ ssh -L 5432:127.0.0.1:5432 web1Læs det som: "lyt på min laptop på port 5432, og send alt, der kommer ind der, gennem SSH-forbindelsen til 127.0.0.1:5432, set fra serveren". Så længe denne session er åben, forbinder du dit databaseprogram til localhost port 5432 på din egen laptop, og så ender du hos databasen på serveren.
Hvad gør det så godt?
- Databasen lytter kun på
127.0.0.1på serveren og kan ikke nås udefra. - Forbindelsen er krypteret af SSH, også selvom databasen selv ikke har kryptering.
- Kun den, der kan logge ind med SSH, kan komme til den. Du bruger altså den stærke sikkerhed, du allerede har.
Kører der allerede noget på 5432 på din laptop, så vælg et andet nummer til venstre: -L 15432:127.0.0.1:5432, og forbind til port 15432. Sætter du tunnelen ind i ~/.ssh/config, har du den altid ved hånden:
Host web1-db
HostName 192.0.2.10
User anna
LocalForward 15432 127.0.0.1:5432Med ssh -N web1-db får du kun tunnelen, uden kommandolinje.
Via en mellemserver: ProxyJump
Nogle gange kan du kun nå en server via en anden, for eksempel en databaseserver uden offentlig IP-adresse bag din webserver. ProxyJump springer via den første server videre til den anden:
Host db1
HostName 10.0.0.5
User anna
ProxyJump web1Forskellen fra agent forwarding (lektion 2.1): med ProxyJump går krypteringen hele vejen mellem din laptop og db1. Mellemserveren sender kun pakkerne videre og kan ikke bruge din nøgle.
Et andet portnummer: ja eller nej?
Mange vejledninger anbefaler at flytte SSH til en anden port, for eksempel 2222. Hvad gør det egentlig?
- Det mindsker støjen: de fleste automatiserede gætteforsøg prøver kun port 22. Din log bliver roligere.
- Det er ikke sikkerhed. En scanner, der gennemgår alle porte, finder SSH på få sekunder ud fra versionsbanneret.
Med nøgler og login med adgangskode slået fra (lektion 2.2) betyder porten ikke meget for sikkerheden. Vil du alligevel skifte, så gør det i den rigtige rækkefølge: åbn den nye port i firewallen, lad SSH lytte på begge porte, test i et andet vindue, og luk først derefter den gamle port. På Ubuntu 24.04 og senere hører systemctl daemon-reload og systemctl restart ssh.socket med (lektion 2.2). Glem ikke, at din udbyder måske også har en firewall.
Tilbagekald adgang
En tidligere kollega eller en webudvikler havde en nøgle på din server og arbejder ikke længere for dig? Det er nemt at tilbagekalde adgangen, hvis du holder styr på det:
- Se alle nøgler:
ssh-keygen -lf ~/.ssh/authorized_keys, og gør det for hver bruger (også/root/.ssh/authorized_keys). - Fjern personens linje.
- Brugte personen sin egen brugerkonto, så lås den (lektion 3.1), og tjek, om personen var med i gruppen
sudo(lektion 3.2). - Har personen set adgangskoder, for eksempel en databaseadgangskode i en konfigurationsfil, så skift dem også.
En almindelig nøgle har ingen udløbsdato. Det, du ikke fjerner, bliver ved med at virke, også år senere. Giver du nogen midlertidig adgang, kan du sætte indstillingen expiry-time="20261231" foran personens linje i authorized_keys; efter den dato afviser serveren nøglen.
Opsummering
~/.ssh/configpå din egen computer gemmer navn, bruger, port og nøgle for hver server;Host *hører hjemme nederst.- scp til enkelte filer, rsync til mapper (pas på skråstregen og på
--delete), sftp i stedet for FTP. - Med
ssh -Lnår du en database via en krypteret tunnel, mens databaseporten forbliver lukket udefra. - ProxyJump springer sikkert via en mellemserver; bedre end agent forwarding.
- Et andet portnummer mindsker støj, men beskytter ikke. Nøgler, du ikke fjerner, bliver ved med at virke.
Quiz
Opgave
Opgave O2.3: En SSH-config og en tunnel. Lav på din egen computer en ~/.ssh/config med et kaldenavn til din server, log ind med kun ssh <bijnaam>, kopiér en fil med scp eller rsync, og lav en tunnel med -L til en tjeneste, der på din server kun lytter på 127.0.0.1 (har du endnu ingen database, så brug port 22 på selve serveren: ssh -L 2200:127.0.0.1:22 <bijnaam> og derefter ssh -p 2200 anna@localhost). Besvar spørgsmålene om, hvad tunnelen gør, og hvorfor porten ikke behøver at være åben.
Opgave O2.3: En SSH-config og en tunnel
Denne opgave laver du selv; ingen tjekker den. Afkryds hvad du har gjort, og markér opgaven som udført.
Din bærbare lytter på den venstre port, trafikken går krypteret gennem SSH og kommer ud på serveren ved 127.0.0.1:<poort>. Tjenesten kan stadig ikke nås udefra. En anden SSH-port giver mindre støj i din log, men er ingen sikring; nøgler og slået adgangskodelogin fra er.
Dine afkrydsninger og noter forbliver kun i denne browser; vi sender dem ingen steder hen. Er du logget ind, gemmer vi kun i Mine kurser, at du har udført opgaven.
Læs mere
Trinnene i disse artikler gælder for WebOkés VPS'er og paneler; hos andre udbydere fungerer det på lignende måde.
- Log ind på din VPS med SSH (og opret en SSH-nøgle)
- Manual til ssh_config (klientindstillinger): https://man.openbsd.org/ssh_config
- Manual til ssh (indstillingerne
-L,-J,-N): https://man.openbsd.org/ssh - Fjern SSH-adgang til din VPS for en tidligere medarbejder eller en bortkommet bærbar
- VPS: fra første login til sikker server 2.4: En SSH-config: log ind med et kort navn
