Hoppa till innehållet

Cookieinställningar

Välj vilka typer av cookies du tillåter. Du kan alltid ändra ditt val via Cookieinställningar längst ned på varje sida. Integritetspolicy

Nödvändiga

Alltid på

Behövs för att logga in, spara din varukorg och komma ihåg dina val. De är alltid på.

Vilka cookies?
  • weboke_sessie, weboke_klant, weboke_remember: din session och att du förblir inloggad
  • weboke_basket: din varukorg
  • wkBtwIncl: visa priser med eller utan moms
  • wok_cookies: ditt cookieval, 12 månader

Mäter vilken annons som leder till ett besök eller en beställning, så att vi inte betalar för annonser som inte ger något.

Vilka cookies?
  • Google Ads via Google Tag Manager (_gcl_au, _gcl_aw), upp till 90 dagar
  • OpenAI Ads, annonser i ChatGPT
  • wok_aff: via vilken partner du kom till oss (affiliateprogram), 60 dagar

4,6

Land och språk

Varje land har en egen webbplats med landets priser och moms.

Visa

Använd SSH smart

Modul 2: SSH och nycklar · Lästid: 10 minuter

Lärandemål: Efter den här lektionen kan du använda SSH smidigt varje dag med en egen konfigurationsfil, kopiera filer med scp och rsync och nå en databas via en tunnel utan att databasporten behöver vara öppen mot internet.

Nyckelbegrepp: ~/.ssh/config, Host, HostName, User, IdentityFile, scp, rsync, sftp, port forwarding, -L, tunnel, ProxyJump, ServerAliveInterval, annat portnummer, återkalla en nyckel

Skriv mindre med ~/.ssh/config

Efter några veckor skriver du det här tiotals gånger om dagen:

anna@laptop:~$ ssh -i ~/.ssh/id_ed25519 anna@192.0.2.10

Med en konfigurationsfil för klienten blir det kortare och du gör färre fel. Filen ligger på din egen dator: ~/.ssh/config (Windows: C:\Users\anna\.ssh\config, utan filändelse).

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 räcker det med:

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

Vad gör raderna?

  • Host är smeknamnet som du själv väljer. Du skriver det efter ssh, scp och rsync.
  • HostName är den riktiga adressen: en IP-adress eller ett namn som finns i DNS.
  • User och Port är användarnamnet och porten, så att du inte längre behöver komma ihåg dem.
  • IdentityFile pekar ut nyckeln. Praktiskt om du har flera nycklar; utan den här raden provar ssh dina standardnycklar.
  • ServerAliveInterval 60 skickar ett litet livstecken var 60:e sekund. Många hemroutrar och wifi-nätverk bryter en tyst anslutning efter några minuter; med den här inställningen förblir din session öppen.

Även här gäller att det första värdet räknas, precis som på servern. Lägg därför allmänna regler som Host * längst ner i filen.

Kopiera filer: scp, rsync och sftp

scp kopierar en fil, med samma form som cp, men med host: framför:

anna@laptop:~$ scp backup.sql web1:/home/anna/
anna@laptop:~$ scp web1:/var/log/nginx/error.log .

rsync är smartare för mappar och stora mängder: det skickar bara det som har ändrats och kan återuppta en avbruten kopiering. Det måste vara installerat på båda sidor (apt install rsync).

anna@laptop:~$ rsync -avz --progress ./site/ web1:/var/www/example.com/

Lägg märke till snedstrecket efter ./site/: med snedstreck kopierar rsync mappens innehåll, utan snedstreck själva mappen (då får du /var/www/example.com/site/). Testa först med --dry-run om du är osäker, och var mycket försiktig med --delete, som på den mottagande sidan tar bort allt som inte finns hos dig.

sftp och grafiska program som FileZilla eller WinSCP använder samma SSH-anslutning och samma nyckel. Du behöver alltså ingen separat FTP-server. En gammaldags FTP-server på en VPS avråder vi från: vanlig FTP skickar ditt lösenord okrypterat över nätverket.

En tunnel i stället för en öppen port

Det här är kanske det mest användbara som SSH kan. Säg att det körs en PostgreSQL-databas på din server. Du vill nå den från din laptop med ett grafiskt program. Frestelsen är stor att öppna port 5432 mot internet. Gör inte det: öppna databasportar är en av de vanligaste orsakerna till dataläckor (lektion 10.2), och kursen kontrollerar senare utifrån att de är stängda (uppgift Z5.1).

Med lokal port forwarding låter du SSH skapa en tunnel:

anna@laptop:~$ ssh -L 5432:127.0.0.1:5432 web1

Läs det som: "lyssna på min laptop på port 5432 och skicka allt som kommer in där genom SSH-anslutningen till 127.0.0.1:5432, sett från servern". Så länge den här sessionen är öppen ansluter du ditt databasprogram till localhost port 5432 på din egen laptop, och då hamnar du hos databasen på servern.

Vad gör det här så bra?

  • Databasen lyssnar bara på 127.0.0.1 på servern och går inte att nå utifrån.
  • Anslutningen krypteras av SSH, även om databasen själv saknar kryptering.
  • Bara den som kan logga in med SSH kommer åt den. Du använder alltså det starka skydd som du redan har.

Körs det redan något på 5432 på din laptop, välj då ett annat nummer till vänster: -L 15432:127.0.0.1:5432, och anslut till port 15432. Lägger du tunneln i ~/.ssh/config har du den alltid till hands:

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 bara tunneln, utan kommandorad.

Via en mellanserver: ProxyJump

Ibland når du en server bara via en annan, till exempel en databasserver utan publik IP-adress bakom din webbserver. ProxyJump hoppar via den första servern vidare till den andra:

Host db1
    HostName 10.0.0.5
    User anna
    ProxyJump web1

Skillnaden mot agent forwarding (lektion 2.1): med ProxyJump går krypteringen hela vägen mellan din laptop och db1. Mellanservern skickar bara vidare paketen och kan inte använda din nyckel.

Ett annat portnummer: ja eller nej?

Många guider rekommenderar att flytta SSH till en annan port, till exempel 2222. Vad gör det egentligen?

  • Det minskar bruset: de flesta automatiska gissningsförsök provar bara port 22. Din logg blir lugnare.
  • Det är inget skydd. En skanner som går igenom alla portar hittar SSH inom några sekunder på dess versionsbanner.

Med nycklar och avstängd lösenordsinloggning (lektion 2.2) spelar porten liten roll för säkerheten. Vill du ändå byta, gör det i rätt ordning: öppna den nya porten i brandväggen, låt SSH lyssna på båda portarna, testa i ett andra fönster och stäng först därefter den gamla porten. På Ubuntu 24.04 och senare hör systemctl daemon-reload och systemctl restart ssh.socket till det (lektion 2.2). Glöm inte att din leverantör kanske också har en brandvägg.

Återkalla åtkomst

En före detta kollega eller en webbutvecklare hade en nyckel på din server och arbetar inte längre för dig? Att återkalla åtkomsten är enkelt, om du håller koll:

  1. Granska alla nycklar: ssh-keygen -lf ~/.ssh/authorized_keys, och gör det för varje användare (även /root/.ssh/authorized_keys).
  2. Ta bort den personens rad.
  3. Använde personen ett eget användarkonto, lås det då (lektion 3.1) och kontrollera om kontot låg i gruppen sudo (lektion 3.2).
  4. Har personen sett lösenord, till exempel ett databaslösenord i en konfigurationsfil, byt då ut dem också.

En vanlig nyckel har inget utgångsdatum. Det du inte tar bort fortsätter att fungera, även flera år senare. Ger du någon tillfällig åtkomst kan du sätta alternativet expiry-time="20261231" före personens rad i authorized_keys; efter det datumet nekar servern nyckeln.

Sammanfattning

  • ~/.ssh/config på din egen dator sparar namn, användare, port och nyckel per server; Host * hör hemma längst ner.
  • scp för enstaka filer, rsync för mappar (se upp med snedstrecket och med --delete), sftp i stället för FTP.
  • Med ssh -L når du en databas via en krypterad tunnel, medan databasporten förblir stängd utifrån.
  • ProxyJump hoppar säkert via en mellanserver; bättre än agent forwarding.
  • Ett annat portnummer minskar bruset men skyddar inte. Nycklar som du inte tar bort fortsätter att fungera.

Quiz

1. Vad gör ssh -L 15432:127.0.0.1:5432 web1?



2. Varför är en SSH-tunnel till en databas bättre än att öppna port 5432 i brandväggen?



3. Du flyttar SSH till port 2222. Vilken är den viktigaste effekten?



4. I din ~/.ssh/config står Host * högst upp med User root, och längre ner Host web1 med User anna. Som vilken användare loggar du in på ssh web1?



5. En webbutvecklare hade en egen SSH-nyckel på din server och arbetar inte längre för dig. Vad räcker inte?



Uppgift

Uppgift O2.3: En SSH-config och en tunnel. Skapa på din egen dator en ~/.ssh/config med ett smeknamn för din server, logga in med bara ssh <bijnaam>, kopiera en fil med scp eller rsync och skapa en tunnel med -L till en tjänst som på din server bara lyssnar på 127.0.0.1 (har du ingen databas än, använd då port 22 på själva servern: ssh -L 2200:127.0.0.1:22 <bijnaam> och därefter ssh -p 2200 anna@localhost). Svara på frågorna om vad tunneln gör och varför porten inte behöver vara öppen.

Uppgift O2.3: En SSH-config och en tunnel

Den här uppgiften gör du själv; ingen kontrollerar den. Bocka av vad du har gjort och markera uppgiften som klar.




Dina bockar och anteckningar sparas bara i den här webbläsaren; vi skickar dem ingenstans. Är du inloggad sparar vi i Mina kurser bara att du har gjort uppgiften.

Läs mer

Stegen i de här artiklarna gäller för WebOkés VPS:er och paneler; hos andra leverantörer fungerar det på liknande sätt.

Ett ögonblick…

Ställ in dina domäner

Ställ in namnservrar, koppling till ditt webbhotell och vem som blir innehavare för varje domän.

Hämtar dina domäner…