Modul 1 · 1.3
Prva prijava prek SSH
Modul 1: Vaš prvi strežnik · Čas branja: 10 minut
Učni cilj: Po tej lekciji se boste lahko prvič prijavili v svoj strežnik prek SSH, preverili prstni odtis strežnika, preden mu zaupate, in vedeli, kaj storiti ob opozorilu, da se je identiteta strežnika spremenila.
Ključni pojmi: SSH, odjemalec in strežnik, vrata 22, pasica z različico, gostiteljski ključ (host key), prstni odtis (SHA256), known_hosts, trust on first use, "REMOTE HOST IDENTIFICATION HAS CHANGED", PowerShell in Terminal
Kaj je SSH
SSH (Secure Shell) je šifrirana povezava, s katero strežnik upravljate na daljavo. Tipkate na svojem računalniku, ukazi pa se izvajajo na strežniku. Vse, kar potuje po povezavi, tudi Vaše geslo, je šifrirano.
Obstajata dve strani:
- odjemalec SSH na Vašem računalniku: program
ssh. Na macOS in Linux je nameščen privzeto. Na Windows 10 (od različice 1809) in Windows 11 je odjemalec OpenSSH del sistema Windows; uporabljate ga v PowerShellu ali v Windows Terminalu. Če ga ni, ga dodate prek Nastavitve, Izbirne funkcije, "Odjemalec OpenSSH". Delujejo tudi programi z okni, kot je PuTTY, vendar v tem tečaju uporabljamossh. - strežnik SSH na VPS: program
sshd(iz paketa OpenSSH). Privzeto posluša na vratih 22.
Prijava
Prijavite se z uporabniškim imenom in naslovom strežnika:
PS C:\Users\anna> ssh root@192.0.2.10Ali z imenom, če ste ga vpisali v DNS (lekcija 7.1):
anna@laptop:~$ ssh root@web1.example.comPrvič boste videli nekaj takega:
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])?To je najpomembnejši trenutek te lekcije. Ne vtipkajte slepo yes.
Gostiteljski ključ in prstni odtis
Vsak strežnik SSH ima enega ali več gostiteljskih ključev (host keys): pare ključev, s katerimi strežnik dokazuje, kdo je. Javni deli so na strežniku v /etc/ssh/, na primer /etc/ssh/ssh_host_ed25519_key.pub. Pri vsaki povezavi strežnik pokaže, da ima zasebni del.
Prstni odtis je kratek povzetek (zgoščena vrednost) takšnega javnega ključa. OpenSSH privzeto prikaže obliko SHA256: SHA256:, ki mu sledi 43 znakov.
Vprašanje "Are you sure you want to continue connecting?" pomeni: Vaš računalnik tega strežnika še ne pozna. Kdo zagotavlja, da govorite s svojim VPS in ne z nekom, ki prestreza promet? Nihče, razen če prstni odtis sami primerjate z zanesljivim virom.
Ta vir je konzola Vašega ponudnika (lekcija 1.2). Tam s strežnikom ne komunicirate prek omrežja. Prijavite se v konzolo in izpišite prstni odtis:
root@web1:~# ssh-keygen -lf /etc/ssh/ssh_host_ed25519_key.pub
256 SHA256:Xq3aTnPpC0m1o4cJ2kVqY8mWb7rZs5dLfE6hUyN9tKs root@web1 (ED25519)Če se natančno ujema s tem, kar prikaže odjemalec, vtipkajte yes. Namesto yes lahko prilepite tudi sam prstni odtis; potem ga ssh primerja namesto Vas. Če se razlikuje, se ustavite in ugotovite, zakaj (napačen naslov IP, strežnik je bil znova nameščen ali nekaj resnejšega).
Bodite pozorni na vrsto: odjemalec navede vrsto ključa (ED25519, ECDSA ali RSA). Primerjajte prstni odtis iste vrste. Veliko slik sistema prstne odtise ob prvem zagonu izpiše tudi v konzolo (cloud-init), med vrsticama, kot je BEGIN SSH HOST KEY FINGERPRINTS.
known_hosts in trust on first use
Ko vtipkate yes, vidite:
Warning: Permanently added '192.0.2.10' (ED25519) to the list of known hosts.Odjemalec shrani ključ v ~/.ssh/known_hosts (v sistemu Windows C:\Users\<naam>\.ssh\known_hosts). Od zdaj naprej ga pri vsaki povezavi samodejno primerja. Temu modelu pravimo trust on first use (TOFU, zaupanje ob prvi uporabi): prvič morate preveriti sami, nato pa nad tem bdi odjemalec.
Zato je to prvo preverjanje tako pomembno: če zaupate napačnemu ključu, Vas odjemalec pozneje nikoli več ne opozori.
Če sami delate na računalniku z Debianom ali Ubuntujem, so imena v known_hosts privzeto zgoščena (HashKnownHosts yes v /etc/ssh/ssh_config), zato tam ne vidite berljivih naslovov IP. V sistemih Windows in macOS so zapisana berljivo. Iskanje povsod deluje z ukazom:
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"
Včasih se prikaže to opozorilo:
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@ WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED! @
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
IT IS POSSIBLE THAT SOMEONE IS DOING SOMETHING NASTY!
...
Host key verification failed.Strežnik pokaže drugačen ključ, kot ga pozna Vaš odjemalec. ssh takrat zavrne povezavo. Vzroki so dveh vrst:
| Običajno | Sumljivo |
|---|---|
| VPS ste znova namestili (novi gostiteljski ključi) | Niste ničesar spremenili, pa je ključ kljub temu drugačen |
| Naslov IP je bil dodeljen drugemu strežniku | Ste v tujem omrežju Wi-Fi |
| Gostiteljske ključe ste namerno zamenjali | Prstni odtis v konzoli se razlikuje od tega, kar zdaj vidi odjemalec |
Če obstaja običajna razlaga, v konzoli znova preverite prstni odtis in šele nato odstranite staro vrstico:
anna@laptop:~$ ssh-keygen -R 192.0.2.10
# Host 192.0.2.10 found: line 3
/home/anna/.ssh/known_hosts updated.Pri naslednji povezavi znova dobite vprašanje kot prvič in znova preverite. V nastavitve nikoli ne vpišite StrictHostKeyChecking no, da bi se znebili opozorila: s tem izklopite prav tisto zaščito, za katero gre.
Pasica z različico
Preden se karkoli šifrira, si odjemalec in strežnik izmenjata vrstico besedila: pasico z različico. Vidna je vsem na internetu. Ogledate si jo z 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.5Strežnik tu pove, kateri protokol (2.0) in katero programsko opremo uporablja. Debian in Ubuntu za tem dodata še različico paketa. To ni skrivnost, ki bi jo morali skrivati: napadalci tako ali tako preizkusijo vse, zaščitite pa se s posodobitvami (modul 4), ne z drugačno pasico. Je pa uporabno: iz pasice od zunaj vidite, ali Vaš strežnik res poganja posodobljeno različico.
Na AlmaLinux in Rocky Linux
Prijava in prstni odtisi delujejo enako. Storitev se imenuje sshd namesto ssh (systemctl status sshd). Pasica ne vsebuje imena distribucije, le različico OpenSSH.
Povzetek
- SSH je šifrirana povezava do Vašega strežnika;
sshje odjemalec,sshdpa strežnik na vratih 22. - Ob prvi povezavi odjemalec prikaže prstni odtis gostiteljskega ključa. Primerjajte ga z izpisom ukaza
ssh-keygen -lfv konzoli, preden vtipkateyes. - Odjemalec shrani ključ v
~/.ssh/known_hostsin Vas odslej opozarja sam (trust on first use). - "REMOTE HOST IDENTIFICATION HAS CHANGED" je po ponovni namestitvi običajno, sicer pa sumljivo. Staro vrstico odstranite šele po preverjanju, z
ssh-keygen -R. - Pasica z različico je javna; zaščita prihaja iz posodobitev, ne iz skrivanja.
Kviz
Naloga
Naloga Z1.3: Pasica SSH in prstni odtis Vašega strežnika. Vpišite naslov svojega strežnika, različico programske opreme iz pasice (na primer OpenSSH_9.6p1) in prstni odtis ED25519, ki ste ga v konzoli izpisali z ssh-keygen -lf. Program vzpostavi eno povezavo do Vaših vrat SSH, prebere pasico in gostiteljski ključ ter ju primerja. Ne prijavi se.
Za nadaljnje branje
- Prijava v VPS prek SSH (in ustvarjanje ključa SSH)
- Nimate več dostopa do VPS: kaj zdaj?
- ssh-keygen(1), možnosti -l, -F in -R: https://manpages.debian.org/trixie/openssh-client/ssh-keygen.1.en.html
- ssh_config(5), StrictHostKeyChecking, FingerprintHash in HashKnownHosts: https://manpages.debian.org/trixie/openssh-client/ssh_config.5.en.html
- RFC 4253, razdelek 4.2 (pasica z različico): https://www.rfc-editor.org/rfc/rfc4253.html
