Gå til innholdet

Cookie-innstillinger

Velg hvilke typer cookies du tillater. Du kan når som helst endre valget via Cookie-innstillinger nederst på hver side. Personvernerklæring

Nødvendige

Alltid på

Trengs for å logge inn, beholde handlekurven og huske valgene dine. Disse er alltid på.

Hvilke cookies?
  • weboke_sessie, weboke_klant, weboke_remember: økten din og at du forblir innlogget
  • weboke_basket: handlekurven din
  • wkBtwIncl: visning av priser med eller uten mva.
  • wok_cookies: cookievalget ditt, 12 måneder

Måler hvilken annonse som fører til et besøk eller en bestilling, slik at vi ikke betaler for annonser som ikke gir noe.

Hvilke cookies?
  • Google Ads via Google Tag Manager (_gcl_au, _gcl_aw), opptil 90 dager
  • OpenAI Ads, annonser i ChatGPT
  • wok_aff: hvilken partner som henviste deg til oss (partnerprogram), 60 dager

4,6

Land og språk

Hvert land har sin egen nettside, med priser og mva. for det landet.

Vis

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.10

Med 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 2222

Nå holder det med:

anna@laptop:~$ ssh web1
anna@web1:~$

Hva gjør linjene?

  • Host er kallenavnet du velger selv. Du skriver det etter ssh, scp og rsync.
  • 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 web1

Les 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.1 på 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:5432

Med 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 web1

Forskjellen 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:

  1. Se gjennom alle nøkler: ssh-keygen -lf ~/.ssh/authorized_keys, og gjør det for hver bruker (også /root/.ssh/authorized_keys).
  2. Fjern linjen til denne personen.
  3. Brukte personen en egen brukerkonto, lås den (leksjon 3.1) og sjekk om personen var med i gruppen sudo (leksjon 3.2).
  4. 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/config på 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 -L nå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

1. Hva gjør ssh -L 15432:127.0.0.1:5432 web1?



2. Hvorfor er en SSH-tunnel til en database bedre enn å åpne port 5432 i brannmuren?



3. Du flytter SSH til port 2222. Hva er den viktigste effekten?



4. I ~/.ssh/config står Host * med User root øverst, og lenger ned Host web1 med User anna. Som hvilken bruker logger du inn på ssh web1?



5. En webutvikler hadde sin egen SSH-nøkkel på serveren din og jobber ikke lenger for deg. Hva er ikke tilstrekkelig?



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.




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.

Et øyeblikk …

Sett opp domenene dine

Ordne for hvert domene navnetjenerne, koblingen til hostingen din og hvem som blir innehaver.

Laster inn domenene dine…