Modul 1 · 1.3
Den första SSH-inloggningen
Modul 1: Din första server · Lästid: 10 minuter
Lärandemål: Efter den här lektionen kan du logga in på din server med SSH för första gången, kontrollera serverns fingeravtryck innan du litar på den och veta vad du gör när du får en varning om att serverns identitet har ändrats.
Nyckelbegrepp: SSH, klient och server, port 22, versionsbanner, host key, fingeravtryck (SHA256), known_hosts, trust on first use, "REMOTE HOST IDENTIFICATION HAS CHANGED", PowerShell och Terminal
Vad SSH är
SSH (Secure Shell) är den krypterade anslutning som du använder för att hantera en server på distans. Du skriver på din egen dator och kommandona körs på servern. Allt som skickas över anslutningen, även ditt lösenord, är krypterat.
Det finns två sidor:
- SSH-klienten på din egen dator: programmet
ssh. På macOS och Linux finns det med från början. På Windows 10 (från version 1809) och Windows 11 är OpenSSH-klienten en del av Windows, och du använder den i PowerShell eller Windows Terminal. Saknas den lägger du till den via Inställningar, Valfria funktioner, "OpenSSH-klient". Program med fönster, till exempel PuTTY, fungerar också, men i den här kursen använder vissh. - SSH-servern på din VPS: programmet
sshd(från OpenSSH). Som standard lyssnar det på port 22.
Logga in
Du loggar in med ett användarnamn och serverns adress:
PS C:\Users\anna> ssh root@192.0.2.10Eller med ett namn, om du har lagt in det i DNS (lektion 7.1):
anna@laptop:~$ ssh root@web1.example.comFörsta gången ser du ungefär det här:
The authenticity of host '192.0.2.10 (192.0.2.10)' can't be established.
ED25519 key fingerprint is SHA256:Xq3aTnPpC0m1o4cJ2kVqY8mWb7rZs5dLfE6hUyN9tKs.
This key is not known by any other names.
Are you sure you want to continue connecting (yes/no/[fingerprint])?Det här är det viktigaste ögonblicket i lektionen. Skriv inte yes utan att tänka efter.
Host key och fingeravtryck
Varje SSH-server har en eller flera host keys: nyckelpar som servern använder för att bevisa vem den är. De publika delarna finns på servern i /etc/ssh/, till exempel /etc/ssh/ssh_host_ed25519_key.pub. Vid varje anslutning visar servern att den har den hemliga delen.
Ett fingeravtryck är en kort sammanfattning (en hash) av en sådan publik nyckel. OpenSSH visar som standard SHA256-formen: SHA256: följt av 43 tecken.
Frågan "Are you sure you want to continue connecting?" betyder att din dator inte känner till den här servern än. Vem garanterar att du pratar med din VPS och inte med någon som avlyssnar trafiken? Ingen, om du inte jämför fingeravtrycket med en pålitlig källa.
Den källan är konsolen hos din leverantör (lektion 1.2). Där pratar du inte med servern via nätverket. Logga in i konsolen och ta fram fingeravtrycket:
root@web1:~# ssh-keygen -lf /etc/ssh/ssh_host_ed25519_key.pub
256 SHA256:Xq3aTnPpC0m1o4cJ2kVqY8mWb7rZs5dLfE6hUyN9tKs root@web1 (ED25519)Stämmer det exakt med det som klienten visar skriver du yes. Du kan också klistra in själva fingeravtrycket i stället för yes, så jämför ssh det åt dig. Skiljer det sig åt stannar du och tar reda på varför (fel IP-adress, servern har installerats om eller något allvarligare).
Tänk på typen: klienten anger typen (ED25519, ECDSA eller RSA). Jämför fingeravtryck av samma typ. Många images skriver också ut fingeravtrycken i konsolen vid första starten (cloud-init), mellan rader som BEGIN SSH HOST KEY FINGERPRINTS.
known_hosts och trust on first use
När du skriver yes ser du:
Warning: Permanently added '192.0.2.10' (ED25519) to the list of known hosts.Klienten sparar nyckeln i ~/.ssh/known_hosts (på Windows C:\Users\<naam>\.ssh\known_hosts). Från och med nu jämför den automatiskt vid varje anslutning. Den här modellen kallas trust on first use (TOFU): första gången måste du kontrollera själv, sedan vakar klienten över det.
Därför är den första kontrollen så viktig: litar du på fel nyckel kommer klienten aldrig att varna dig efteråt.
Arbetar du själv på en dator med Debian eller Ubuntu är namnen i known_hosts hashade som standard (HashKnownHosts yes i /etc/ssh/ssh_config), så där ser du inga läsbara IP-adresser. På Windows och macOS står de i klartext. Sökning fungerar överallt med:
anna@laptop:~$ ssh-keygen -F 192.0.2.10
# Host 192.0.2.10 found: line 3
|1|kP9...= ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAA..."REMOTE HOST IDENTIFICATION HAS CHANGED"
Ibland får du den här varningen:
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@ WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED! @
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
IT IS POSSIBLE THAT SOMEONE IS DOING SOMETHING NASTY!
...
Host key verification failed.Servern visar en annan nyckel än den som din klient känner till. ssh vägrar då att ansluta. Det finns två sorters orsaker:
| Normalt | Misstänkt |
|---|---|
| Du har installerat om din VPS (nya host keys) | Du har inte ändrat något och ändå är nyckeln en annan |
| IP-adressen har getts till en annan server | Du sitter på ett okänt wifinätverk |
| Du har medvetet bytt ut host keys | Fingeravtrycket i konsolen skiljer sig från det som klienten ser nu |
Finns det en normal förklaring kontrollerar du fingeravtrycket i konsolen igen och tar först därefter bort den gamla raden:
anna@laptop:~$ ssh-keygen -R 192.0.2.10
# Host 192.0.2.10 found: line 3
/home/anna/.ssh/known_hosts updated.Vid nästa anslutning får du samma fråga som första gången, och du kontrollerar igen. Sätt aldrig StrictHostKeyChecking no i dina inställningar för att bli av med varningen: då stänger du av precis det skydd som det handlar om.
Versionsbannern
Innan något krypteras skickar klienten och servern en textrad till varandra: versionsbannern. Den syns för alla på internet. Du ser den med ssh -v:
anna@laptop:~$ ssh -v root@192.0.2.10 2>&1 | grep "remote software"
debug1: Remote protocol version 2.0, remote software version OpenSSH_9.6p1 Ubuntu-3ubuntu13.5Här talar servern om vilket protokoll (2.0) och vilken programvara den använder. Debian och Ubuntu lägger till paketversionen efter. Det är ingen hemlighet som du behöver dölja: angripare provar ändå allt, och du skyddar dig med uppdateringar (modul 4), inte med en annan banner. Det är däremot praktiskt: på bannern ser du utifrån om din server verkligen kör den uppdaterade versionen.
På AlmaLinux och Rocky Linux
Inloggning och fingeravtryck fungerar på samma sätt. Tjänsten heter sshd i stället för ssh (systemctl status sshd). Bannern innehåller inget distributionsnamn, bara OpenSSH-versionen.
Sammanfattning
- SSH är den krypterade anslutningen till din server.
sshär klienten ochsshdservern på port 22. - Vid den första anslutningen visar klienten fingeravtrycket för serverns host key. Jämför det med utdata från
ssh-keygen -lfi konsolen innan du skriveryes. - Klienten sparar nyckeln i
~/.ssh/known_hostsoch varnar dig själv från och med nu (trust on first use). - "REMOTE HOST IDENTIFICATION HAS CHANGED" är normalt efter en ominstallation, annars är det misstänkt. Ta bara bort en gammal rad efter kontroll, med
ssh-keygen -R. - Versionsbannern är offentlig. Skyddet kommer från uppdateringar, inte från att dölja den.
Quiz
Uppgift
Uppgift Z1.3: SSH-banner och fingeravtryck för din server. Fyll i din servers adress, programversionen från bannern (till exempel OpenSSH_9.6p1) och det ED25519-fingeravtryck som du tog fram i konsolen med ssh-keygen -lf. Programmet gör en anslutning till din SSH-port, läser bannern och host key och jämför. Det loggar inte in.
Läs mer
- Logga in på din VPS med SSH (och skapa en SSH-nyckel)
- Ingen åtkomst till din VPS längre: vad gör du?
- ssh-keygen(1), alternativen -l, -F och -R: https://manpages.debian.org/trixie/openssh-client/ssh-keygen.1.en.html
- ssh_config(5), StrictHostKeyChecking, FingerprintHash och HashKnownHosts: https://manpages.debian.org/trixie/openssh-client/ssh_config.5.en.html
- RFC 4253, avsnitt 4.2 (versionsbannern): https://www.rfc-editor.org/rfc/rfc4253.html
