Modul 2 · 2.3
Bruk SSH smart
Modul 2: SSH og nøkler · Lesetid: 10 minutter
Læringsmål: Etter denne leksjonen kan du bruke SSH smart i hverdagen med din egen konfigurasjonsfil, kopiere filer med scp og rsync, og nå en database gjennom en tunnel uten at databaseporten må være åpen mot internett.
Nøkkelbegreper: ~/.ssh/config, Host, HostName, User, IdentityFile, scp, rsync, sftp, port forwarding, -L, tunnel, ProxyJump, ServerAliveInterval, annet portnummer, trekke tilbake en nøkkel
Skriv mindre med ~/.ssh/config
Etter noen uker skriver du dette flere titalls ganger om dagen:
anna@laptop:~$ ssh -i ~/.ssh/id_ed25519 anna@192.0.2.10Med en konfigurasjonsfil for klienten blir det kortere, og du gjør færre feil. Filen ligger på din egen datamaskin: ~/.ssh/config (Windows: C:\Users\anna\.ssh\config, uten filendelse).
Host web1
HostName 192.0.2.10
User anna
IdentityFile ~/.ssh/id_ed25519
ServerAliveInterval 60
Host test
HostName test.example.com
User anna
Port 2222Nå holder det med:
anna@laptop:~$ ssh web1
anna@web1:~$Hva gjør linjene?
- Host er kallenavnet du velger selv. Du skriver det etter
ssh,scpogrsync. - HostName er den egentlige adressen: en IP-adresse eller et navn som står i DNS.
- User og Port er brukernavnet og porten, så du slipper å huske dem.
- IdentityFile peker på nøkkelen. Praktisk hvis du har flere nøkler; uten denne linjen prøver ssh standardnøklene dine.
- ServerAliveInterval 60 sender et lite livstegn hvert 60. sekund. Mange hjemmerutere og wifi-nett bryter en stille forbindelse etter noen minutter; med dette holdes økten din åpen.
Også her gjelder det at den første verdien teller, akkurat som på serveren. Sett derfor generelle regler som Host * nederst i filen.
Kopiere filer: scp, rsync og sftp
scp kopierer en fil, med 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 med mapper og store mengder data: den sender bare det som er endret, og kan fortsette en avbrutt kopiering. Den må være installert på begge sider (apt install rsync).
anna@laptop:~$ rsync -avz --progress ./site/ web1:/var/www/example.com/Legg merke til skråstreken etter ./site/: med skråstrek kopierer rsync innholdet i mappen, uten skråstrek selve mappen (da får du /var/www/example.com/site/). Prøv først med --dry-run hvis du er usikker, og vær svært forsiktig med --delete, som sletter alt på mottakersiden som ikke finnes hos deg.
sftp og grafiske programmer som FileZilla eller WinSCP bruker den samme SSH-forbindelsen og den samme nøkkelen. Du trenger altså ingen egen FTP-server. En gammeldags FTP-server på en VPS frarådes: vanlig FTP sender passordet ditt ukryptert over nettverket.
En tunnel i stedet for en åpen port
Dette er kanskje det nyttigste SSH kan gjøre. Tenk deg at det kjører en PostgreSQL-database på serveren din. Du vil koble deg til den fra laptopen med et grafisk program. Fristelsen er stor til å åpne port 5432 mot internett. Ikke gjør det: åpne databaseporter er en av de største årsakene til datalekkasjer (leksjon 10.2), og kurset kontrollerer senere utenfra at de er stengt (oppgave Z5.1).
Med lokal port forwarding lar du SSH lage en tunnel:
anna@laptop:~$ ssh -L 5432:127.0.0.1:5432 web1Les det slik: «lytt på laptopen min på port 5432, og send alt som kommer inn der gjennom SSH-forbindelsen til 127.0.0.1:5432, sett fra serveren». Så lenge denne økten er åpen, kobler du databaseprogrammet ditt til localhost port 5432 på din egen laptop, og du havner hos databasen på serveren.
Hva gjør dette så bra?
- Databasen lytter bare på
127.0.0.1på serveren og kan ikke nås utenfra. - Forbindelsen krypteres av SSH, også hvis databasen selv ikke har kryptering.
- Bare den som kan logge inn med SSH, kommer til. Du bruker altså den sterke sikkerheten du allerede har.
Kjører det allerede noe på 5432 på laptopen din, velger du et annet nummer til venstre: -L 15432:127.0.0.1:5432, og kobler til port 15432. Legger du tunnelen i ~/.ssh/config, har du den alltid for 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 bare tunnelen, uten kommandolinje.
Via en mellomserver: ProxyJump
Noen ganger kan du bare nå en server via en annen, for eksempel en databaseserver uten offentlig IP-adresse bak webserveren din. ProxyJump hopper via den første serveren videre til den andre:
Host db1
HostName 10.0.0.5
User anna
ProxyJump web1Forskjellen fra agent forwarding (leksjon 2.1): med ProxyJump går krypteringen hele veien mellom laptopen din og db1. Mellomserveren sender bare pakkene videre og kan ikke bruke nøkkelen din.
Et annet portnummer: ja eller nei?
Mange veiledninger anbefaler å flytte SSH til en annen port, for eksempel 2222. Hva gjør det egentlig?
- Det reduserer støyen: de fleste automatiserte gjetteforsøk prøver bare port 22. Loggen din blir roligere.
- Det er ingen sikkerhet. En skanner som går gjennom alle porter, finner SSH i løpet av sekunder via versjonsbanneret.
Med nøkler og passordinnlogging slått av (leksjon 2.2) betyr porten lite for sikkerheten. Vil du likevel bytte, gjør det i riktig rekkefølge: åpne den nye porten i brannmuren, la SSH lytte på begge portene, test i et annet vindu, og steng først da den gamle porten. På Ubuntu 24.04 og nyere hører systemctl daemon-reload og systemctl restart ssh.socket med (leksjon 2.2). Ikke glem at leverandøren din kanskje også har en brannmur.
Trekke tilbake tilgang
En tidligere kollega eller en webutvikler hadde en nøkkel på serveren din og jobber ikke lenger for deg? Det er enkelt å trekke tilbake tilgangen, så lenge du holder oversikt:
- Se gjennom alle nøkler:
ssh-keygen -lf ~/.ssh/authorized_keys, og gjør det for hver bruker (også/root/.ssh/authorized_keys). - Fjern linjen til denne personen.
- Brukte personen en egen brukerkonto, lås den (leksjon 3.1) og sjekk om personen var med i gruppen
sudo(leksjon 3.2). - Har personen sett passord, som et databasepassord i en konfigurasjonsfil, bytt dem også.
En vanlig nøkkel har ingen utløpsdato. Det du ikke fjerner, fortsetter å virke, også flere år senere. Gir du noen midlertidig tilgang, kan du sette valget expiry-time="20261231" foran linjen deres i authorized_keys; etter den datoen avviser serveren nøkkelen.
Sammendrag
~/.ssh/configpå din egen datamaskin lagrer navn, bruker, port og nøkkel for hver server;Host *hører hjemme nederst.- scp for enkeltfiler, rsync for mapper (pass på skråstreken og
--delete), sftp i stedet for FTP. - Med
ssh -Lnår du en database via en kryptert tunnel, mens databaseporten forblir stengt utenfra. - ProxyJump hopper trygt via en mellomserver; bedre enn agent forwarding.
- Et annet portnummer reduserer støy, men gir ingen sikkerhet. Nøkler du ikke fjerner, fortsetter å virke.
Quiz
Oppgave
Oppgave O2.3: En SSH-config og en tunnel. Lag en ~/.ssh/config på din egen datamaskin med et kallenavn for serveren din, logg inn med bare ssh <bijnaam>, kopier en fil med scp eller rsync, og lag en tunnel med -L til en tjeneste som bare lytter på 127.0.0.1 på serveren din (har du ingen database ennå, bruk port 22 på selve serveren: ssh -L 2200:127.0.0.1:22 <bijnaam> og deretter ssh -p 2200 anna@localhost). Svar på spørsmålene om hva tunnelen gjør og hvorfor porten ikke trenger å være åpen.
Oppgave O2.3: En SSH-config og en tunnel
Denne oppgaven gjør du selv; ingen kontrollerer den. Kryss av det du har gjort, og merk oppgaven som fullført.
Den bærbare PC-en lytter på porten til venstre, trafikken går kryptert gjennom SSH og kommer ut på serveren ved 127.0.0.1:<poort>. Tjenesten er fortsatt utilgjengelig utenfra. En annen SSH-port gir mindre støy i loggen, men er ingen sikring. Det er nøkler og avslått passordinnlogging.
Avkrysningene og notatene dine blir kun i denne nettleseren; vi sender dem ikke noe sted. Er du logget inn, lagrer vi kun i Mine kurs at du har gjort oppgaven.
Les mer
Trinnene i disse artiklene gjelder for VPS-ene og panelene til WebOké; hos andre leverandører fungerer det på lignende måte.
- Logg inn på VPS-en din med SSH (og lag en SSH-nøkkel)
- Håndbok for ssh_config (klientinnstillinger): https://man.openbsd.org/ssh_config
- Håndbok for ssh (valgene
-L,-J,-N): https://man.openbsd.org/ssh - Trekk tilbake SSH-tilgang til VPS-en din for en tidligere ansatt eller en mistet bærbar PC
- VPS: fra første innlogging til sikker server 2.4: En SSH-config: logg inn med et kort navn
