První přihlášení přes SSH
Modul 1: Váš první server · Doba čtení: 10 min.
Cíl lekce: Po této lekci se dokážete poprvé přihlásit k serveru přes SSH, ověřit otisk klíče serveru dříve, než mu začnete důvěřovat, a budete vědět, co dělat při varování, že se identita serveru změnila.
Klíčové pojmy: SSH, klient a server, port 22, banner s verzí, host key, otisk (SHA256), known_hosts, trust on first use, "REMOTE HOST IDENTIFICATION HAS CHANGED", PowerShell a Terminál
Co je SSH
SSH (Secure Shell) je šifrované spojení, kterým server spravujete na dálku. Píšete na svém počítači a příkazy se provádějí na serveru. Vše, co jde po lince, včetně Vašeho hesla, je šifrované.
Spojení má dvě strany:
- SSH klient na Vašem počítači: program
ssh. V systémech macOS a Linux je součástí standardní instalace. Ve Windows 10 (od verze 1809) a Windows 11 je klient OpenSSH součástí systému Windows; používáte ho v PowerShellu nebo ve Windows Terminálu. Pokud chybí, přidáte ho v Nastavení, Volitelné funkce, "Klient OpenSSH". Fungují i programy s grafickým oknem, například PuTTY, ale v tomto kurzu používámessh. - SSH server na VPS: program
sshd(z balíku OpenSSH). Ve výchozím nastavení naslouchá na portu 22.
Přihlášení
Přihlašujete se uživatelským jménem a adresou serveru:
PS C:\Users\anna> ssh root@192.0.2.10Nebo jménem, pokud jste ho zadali do DNS (lekce 7.1):
anna@laptop:~$ ssh root@web1.example.comNapoprvé uvidíte něco takového:
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])?Toto je nejdůležitější okamžik celé lekce. Nepište naslepo yes.
Host key a otisk
Každý SSH server má jeden nebo více host keys: páry klíčů, kterými server prokazuje, kdo je. Veřejné části jsou na serveru uložené v /etc/ssh/, například /etc/ssh/ssh_host_ed25519_key.pub. Při každém spojení server ukáže, že má i tajnou část.
Otisk je krátké shrnutí (hash) takového veřejného klíče. OpenSSH standardně zobrazuje podobu SHA256: SHA256: a za ním 43 znaků.
Otázka "Are you sure you want to continue connecting?" znamená: Váš počítač tento server ještě nezná. Kdo zaručí, že komunikujete se svým VPS, a ne s někým, kdo provoz odposlouchává? Nikdo, dokud otisk sami neporovnáte s důvěryhodným zdrojem.
Tímto zdrojem je konzole Vašeho poskytovatele (lekce 1.2). Tam se serverem nekomunikujete přes síť. Přihlaste se do konzole a otisk si vypište:
root@web1:~# ssh-keygen -lf /etc/ssh/ssh_host_ed25519_key.pub
256 SHA256:Xq3aTnPpC0m1o4cJ2kVqY8mWb7rZs5dLfE6hUyN9tKs root@web1 (ED25519)Pokud se přesně shoduje s tím, co ukazuje klient, napište yes. Místo yes můžete také vložit samotný otisk; ssh ho pak porovná za Vás. Pokud se liší, zastavte se a zjistěte proč (špatná IP adresa, přeinstalovaný server, nebo něco vážnějšího).
Dávejte pozor na typ: klient uvádí typ klíče (ED25519, ECDSA nebo RSA). Porovnávejte otisk stejného typu. Mnoho obrazů systému vypisuje otisky do konzole také při prvním spuštění (cloud-init), mezi řádky jako BEGIN SSH HOST KEY FINGERPRINTS.
known_hosts a trust on first use
Když napíšete yes, uvidíte:
Warning: Permanently added '192.0.2.10' (ED25519) to the list of known hosts.Klient uloží klíč do ~/.ssh/known_hosts (ve Windows C:\Users\<naam>\.ssh\known_hosts). Od této chvíle ho při každém spojení automaticky porovnává. Tento model se nazývá trust on first use (TOFU, důvěra při prvním použití): napoprvé musíte klíč zkontrolovat sami, potom ho hlídá klient.
Proto je ta první kontrola tak důležitá: pokud důvěřujete špatnému klíči, klient Vás potom už nikdy nevaruje.
Pracujete-li sami na počítači s Debianem nebo Ubuntu, jsou jména v known_hosts standardně hashovaná (HashKnownHosts yes v /etc/ssh/ssh_config), takže tam čitelné IP adresy neuvidíte. Ve Windows a macOS jsou uložené čitelně. Vyhledávání funguje všude pomocí:
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"
Někdy uvidíte toto varování:
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@ WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED! @
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
IT IS POSSIBLE THAT SOMEONE IS DOING SOMETHING NASTY!
...
Host key verification failed.Server ukazuje jiný klíč, než jaký zná Váš klient. ssh pak odmítne spojení navázat. Příčiny jsou dvojího druhu:
| Běžné | Podezřelé |
|---|---|
| VPS jste přeinstalovali (nové host keys) | Nic jste neměnili, a přesto je klíč jiný |
| IP adresa byla přidělena jinému serveru | Jste připojeni k cizí Wi-Fi síti |
| Host keys jste vědomě vyměnili | Otisk v konzoli se liší od toho, co nyní vidí klient |
Pokud existuje běžné vysvětlení, znovu zkontrolujte otisk v konzoli a teprve potom odstraňte starý řádek:
anna@laptop:~$ ssh-keygen -R 192.0.2.10
# Host 192.0.2.10 found: line 3
/home/anna/.ssh/known_hosts updated.Při dalším spojení dostanete znovu otázku jako napoprvé a opět klíč zkontrolujete. Nikdy si do nastavení nedávejte StrictHostKeyChecking no, abyste se varování zbavili: vypnuli byste tím přesně tu ochranu, o kterou jde.
Banner s verzí
Dříve než se cokoli zašifruje, pošlou si klient a server jeden řádek textu: banner s verzí. Ten je viditelný pro kohokoli na internetu. Zobrazíte ho pomocí 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.5Server zde uvádí, jaký protokol (2.0) a jaký software používá. Debian a Ubuntu za to připojují verzi balíku. Není to tajemství, které musíte skrývat: útočníci stejně zkoušejí všechno a chráníte se aktualizacemi (modul 4), ne jiným bannerem. Užitečné ale je, že podle banneru zvenku poznáte, zda na serveru opravdu běží aktualizovaná verze.
V AlmaLinuxu a Rocky Linuxu
Přihlášení a otisky fungují stejně. Služba se jmenuje sshd místo ssh (systemctl status sshd). Banner neobsahuje název distribuce, jen verzi OpenSSH.
Shrnutí
- SSH je šifrované spojení k Vašemu serveru;
sshje klient,sshdserver na portu 22. - Při prvním spojení klient zobrazí otisk host key. Porovnejte ho s výstupem
ssh-keygen -lfv konzoli dříve, než napíšeteyes. - Klient uloží klíč do
~/.ssh/known_hostsa nadále Vás varuje sám (trust on first use). - "REMOTE HOST IDENTIFICATION HAS CHANGED" je po přeinstalaci normální; jinak je to podezřelé. Starý řádek odstraňte až po kontrole, pomocí
ssh-keygen -R. - Banner s verzí je veřejný; ochranu zajišťují aktualizace, ne skrývání.
Kvíz
Úkol
Úkol Z1.3: SSH banner a otisk klíče Vašeho serveru. Zadejte adresu svého serveru, verzi softwaru z banneru (například OpenSSH_9.6p1) a otisk ED25519, který jste si v konzoli vypsali pomocí ssh-keygen -lf. Program naváže jedno spojení na Váš SSH port, přečte banner a host key a porovná je. Nepřihlašuje se.
Doporučujeme k přečtení
- Přihlášení k VPS přes SSH (a vytvoření SSH klíče)
- Žádný přístup k VPS: co teď?
- ssh-keygen(1), volby -l, -F a -R: https://manpages.debian.org/trixie/openssh-client/ssh-keygen.1.en.html
- ssh_config(5), StrictHostKeyChecking, FingerprintHash a HashKnownHosts: https://manpages.debian.org/trixie/openssh-client/ssh_config.5.en.html
- RFC 4253, oddíl 4.2 (banner s verzí): https://www.rfc-editor.org/rfc/rfc4253.html
