Gå direkte til indholdet

Cookieindstillinger

Vælg for hver type, hvilke cookies du tillader. Du kan altid ændre dit valg via Cookieindstillinger nederst på hver side. Privatlivspolitik

Nødvendige

Altid slået til

Nødvendige for at logge ind, gemme din kurv og huske dine valg. De er altid slået til.

Hvilke cookies?
  • weboke_sessie, weboke_klant, weboke_remember: din session og at forblive logget ind
  • weboke_basket: din kurv
  • wkBtwIncl: vise priser med eller uden moms
  • wok_cookies: dit cookievalg, 12 måneder

Måler, hvilken annonce der fører til et besøg eller en bestilling, så vi ikke betaler for annoncer, der ikke virker.

Hvilke cookies?
  • Google Ads via Google Tag Manager (_gcl_au, _gcl_aw), op til 90 dage
  • OpenAI Ads, annoncer i ChatGPT
  • wok_aff: hvilken partner der henviste dig til os (affiliateprogram), 60 dage

4,6

Land og sprog

Hvert land har sin egen side med landets priser og moms.

Se

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

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

Nu 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, scp og rsync.
  • 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 web1

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

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

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

  1. Se alle nøgler: ssh-keygen -lf ~/.ssh/authorized_keys, og gør det for hver bruger (også /root/.ssh/authorized_keys).
  2. Fjern personens linje.
  3. Brugte personen sin egen brugerkonto, så lås den (lektion 3.1), og tjek, om personen var med i gruppen sudo (lektion 3.2).
  4. 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/config på 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 -L nå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

1. Hvad gør ssh -L 15432:127.0.0.1:5432 web1?



2. Hvorfor er en SSH-tunnel til en database bedre end at åbne port 5432 i firewallen?



3. Du flytter SSH til port 2222. Hvad er den vigtigste effekt?



4. I din ~/.ssh/config står øverst Host * med User root, og længere nede Host web1 med User anna. Hvilken bruger logger du ind som på ssh web1?



5. En webudvikler havde sin egen SSH-nøgle på din server og arbejder ikke længere for dig. Hvad er ikke nok?



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.




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.

Et øjeblik…

Opsæt dine domæner

Angiv for hvert domæne navneserverne, tilknytningen til din hosting, og hvem der bliver ejer.

Indlæser dine domæner…