Vytvoření a použití SSH klíčů
Modul 2: SSH a klíče · Doba čtení: 10 min.
Cíl lekce: Po této lekci umíte vytvořit pár klíčů, nahrát veřejný klíč na svůj server, přihlásit se bez hesla a uložit svůj soukromý klíč tak, aby ztráta notebooku nebyla katastrofou.
Klíčové pojmy: pár klíčů, veřejný klíč, soukromý klíč, ed25519, RSA, passphrase, ssh-agent, ssh-copy-id, authorized_keys, oprávnění 700 a 600, klíč pro každé zařízení, klíč FIDO2
Proč jsou klíče lepší než hesla
V lekci 1.3 jste se přihlásili heslem. Funguje to, ale server na internetu už od první minuty navštěvují programy, které hesla hádají. Podívejte se do logu čerstvě nainstalovaného serveru:
root@web1:~# journalctl -u ssh --since "1 hour ago" | grep -c "Failed password"
214Stovky pokusů za hodinu jsou normální. Silné heslo je zastaví, ale vytvořili jste slabé místo, které nepotřebujete. Se SSH klíčem je hádání zbytečné: není tu nic, co by se dalo najít ve slovníku.
Klíč se skládá ze dvou částí, které k sobě patří, z páru klíčů:
- Soukromý klíč zůstává na Vašem vlastním počítači. Kdo má tento soubor (a zná passphrase), se může přihlásit. Nesdílejte ho s nikým, ani se svým poskytovatelem, ani s helpdeskem.
- Veřejný klíč předáte serveru. Ten smí vidět kdokoli: nelze se s ním přihlásit, slouží jen k ověření.
Při přihlášení se po lince neposílá žádné heslo. Váš počítač podpisem prokáže, že má soukromý klíč, a server tento podpis ověří pomocí veřejného klíče. I když někdo sleduje síť, neuvidí nic, co by mohl později znovu použít.
Vytvoření klíče
Klíč vytváříte na svém vlastním počítači, ne na serveru. Ve Windows 10 a 11, macOS a Linux je ssh-keygen již k dispozici. Otevřete PowerShell nebo Terminál:
anna@laptop:~$ ssh-keygen -t ed25519 -C "anna@laptop 2026"
Generating public/private ed25519 key pair.
Enter file in which to save the key (/home/anna/.ssh/id_ed25519):
Enter passphrase for "/home/anna/.ssh/id_ed25519" (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /home/anna/.ssh/id_ed25519
Your public key has been saved in /home/anna/.ssh/id_ed25519.pub
The key fingerprint is:
SHA256:q3J8vX0bT2kPz9mWc1nR4sLh7uYdE5aF6gBiC0oN2xQ anna@laptop 2026Co se tu děje?
-t ed25519volí typ. Ed25519 je krátký, rychlý a bezpečný a od OpenSSH 9.5 je také výchozím typem, pokud nic nezadáte. Pokud musíte obsluhovat starý systém, který ed25519 nezná, použijte RSA s alespoň 3072 bity:ssh-keygen -t rsa -b 4096. Starší typy jako DSA byly z OpenSSH odstraněny; nepoužívejte je.-Cje jen komentář. Uveďte do něj něco, podle čeho později poznáte, ze kterého zařízení klíč je. To ohromně pomůže, když budete muset klíč zneplatnit.- Passphrase šifruje soukromý klíč na Vašem disku. Pokud Vám někdo ukradne notebook, zloděj má zašifrovaný soubor. Bez passphrase by měl okamžitý přístup ke všem Vašim serverům.
Nyní máte dva soubory:
| Soubor | Co to je | Sdílet? |
|---|---|---|
~/.ssh/id_ed25519 | Soukromý klíč | Nikdy |
~/.ssh/id_ed25519.pub | Veřejný klíč, jeden řádek textu | Ano, na server |
Ve Windows jsou uloženy v C:\Users\anna\.ssh\. Veřejný klíč je jeden řádek, který začíná ssh-ed25519:
anna@laptop:~$ cat ~/.ssh/id_ed25519.pub
ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIHk2... anna@laptop 2026Nahrání veřejného klíče na server
Server hledá veřejné klíče v souboru ~/.ssh/authorized_keys uživatele, pod kterým se přihlašujete. Každý řádek je jeden klíč. Klíč tam můžete dostat třemi způsoby:
1. Při instalaci. Většina poskytovatelů má při vytváření nebo přeinstalaci VPS pole pro Váš veřejný klíč. U WebOké se toto pole jmenuje "SSH klíč" v obrazovce VPS; u jiných poskytovatelů to funguje podobně. Je to nejlepší způsob: přihlášení heslem pak nemusí být nikdy zapnuté.
2. Pomocí ssh-copy-id (macOS a Linux), dokud ještě funguje přihlášení heslem:
anna@laptop:~$ ssh-copy-id anna@192.0.2.10
/usr/bin/ssh-copy-id: INFO: 1 key(s) remain to be installed
anna@192.0.2.10's password:
Number of key(s) added: 13. Ručně, například z Windows nebo přes konzoli Vašeho poskytovatele. Vložte řádek ze souboru .pub do authorized_keys a nastavte správná oprávnění:
anna@web1:~$ mkdir -p ~/.ssh
anna@web1:~$ nano ~/.ssh/authorized_keys
anna@web1:~$ chmod 700 ~/.ssh
anna@web1:~$ chmod 600 ~/.ssh/authorized_keysTato oprávnění nejsou detail. SSH server je kontroluje (nastavení StrictModes je ve výchozím stavu zapnuté): pokud mohou do Vaší složky .ssh nebo do Vaší domovské složky zapisovat i jiní, server Vaše klíče ignoruje. Pak prostě znovu uvidíte výzvu k zadání hesla, bez jasné chybové hlášky. Jak číst oprávnění, se naučíte v lekci 3.1.
Potom vyzkoušejte přihlášení v novém okně:
anna@laptop:~$ ssh anna@192.0.2.10
Enter passphrase for key '/home/anna/.ssh/id_ed25519':
anna@web1:~$Výzva teď přichází z Vašeho vlastního počítače (passphrase Vašeho klíče), už ne ze serveru.
ssh-agent: odemknout jen jednou
Zadávat passphrase pokaždé je otravné. ssh-agent drží Váš odemčený klíč v paměti, dokud jste přihlášeni ke svému počítači:
anna@laptop:~$ ssh-add ~/.ssh/id_ed25519
Enter passphrase for /home/anna/.ssh/id_ed25519:
Identity added: /home/anna/.ssh/id_ed25519 (anna@laptop 2026)
anna@laptop:~$ ssh-add -l
256 SHA256:q3J8vX0bT2kPz9mWc1nR4sLh7uYdE5aF6gBiC0oN2xQ anna@laptop 2026 (ED25519)V macOS se agent propojí s klíčenkou, ve Windows jde o službu "OpenSSH Authentication Agent" (jednorázově ji zapněte ve Službách). Tak máte pohodlí bez hesla a přesto zašifrovaný klíč na disku.
Pozor na agent forwarding (ssh -A): s ním smí server, na který se přihlašujete, používat Vašeho agenta. Kdo je na tom serveru root, může pak s Vaším klíčem pokračovat dál. Používejte to jen na serverech, kterým plně důvěřujete, nebo použijte ProxyJump (lekce 2.3).
Jeden klíč pro každé zařízení a přehled, kde jsou
Častá chyba: zkopírovat jeden soukromý klíč do notebooku, PC i telefonu. Když pak jedno zařízení ztratíte, musíte klíč všude vyměnit a všechna zařízení nastavit znovu. Lepší je:
- vytvořit na každém zařízení vlastní klíč s jasným komentářem (
-C "anna@telefoon"); - dát všechny veřejné klíče do
authorized_keys, jeden na řádek; - když zařízení ztratíte, odstranit jen ten jeden řádek.
Pravidelně kontrolujte, které klíče mají přístup:
anna@web1:~$ ssh-keygen -lf ~/.ssh/authorized_keys
256 SHA256:q3J8vX0bT2kPz9mWc1nR4sLh7uYdE5aF6gBiC0oN2xQ anna@laptop 2026 (ED25519)
256 SHA256:Zt5oP1yW8eQ3rK6sV0bN9mD2xA4cH7jL1uI5fG8tE3w anna@telefoon (ED25519)Pokud tam najdete klíč, který neznáte, je to varovný signál (lekce 10.3). Útočníci si rádi vkládají vlastní klíč do authorized_keys, aby se mohli později vrátit.
Hardwarový klíč (FIDO2, například YubiKey) je také možnost. S ssh-keygen -t ed25519-sk je tajná část uložena přímo v klíči a při každém použití se ho musíte dotknout. Ukradený soubor je pak bezcenný. Je to pěkný krok navíc, ale pro začátek není nutný.
Ztratili jste soukromý klíč?
Pokud ztratíte svůj jediný soukromý klíč a přihlášení heslem je vypnuté, přes SSH se už nedostanete dovnitř. Proto:
- mějte na serveru vždy alespoň dva klíče (například z notebooku a z PC);
- vězte, jak funguje konzole Vašeho poskytovatele (lekce 1.2). Přihlašujete se v ní, jako byste k serveru připojili klávesnici, a funguje i bez SSH. U WebOké se jmenuje Konzole v obrazovce VPS; jiní poskytovatelé jí říkají VNC konzole, webová konzole nebo nouzová konzole.
V AlmaLinux a Rocky Linux
Vše v této lekci funguje stejně. Jedna past navíc: se zapnutým SELinux musí mít ~/.ssh správný bezpečnostní štítek. Pokud jste složku vytvořili ručně nebo zkopírovali a Váš klíč je ignorován, restorecon -Rv ~/.ssh to napraví.
Shrnutí
- Pár klíčů se skládá ze soukromého klíče (zůstává u Vás) a veřejného klíče (jde na server, do
~/.ssh/authorized_keys). - Klíče vytvářejte pomocí
ssh-keygen -t ed25519na vlastním počítači, s passphrase; pro pohodlí používejte ssh-agent. - Na oprávněních záleží:
~/.sshna 700 aauthorized_keysna 600, jinak server Váš klíč ignoruje. - Jeden klíč pro každé zařízení, s jasným komentářem, abyste mohli jeden z nich zneplatnit.
- Mějte druhý klíč a znejte konzoli svého poskytovatele jako nouzový vstup.
Kvíz
Úkol
Úkol O2.1: Vytvoření a použití klíče. Na svém vlastním počítači vytvořte klíč ed25519 s passphrase a jasným komentářem, nahrajte ho na svůj server (přes pole u poskytovatele, pomocí ssh-copy-id nebo ručně), zkontrolujte oprávnění a v novém okně se pomocí klíče přihlaste. Potom vyplňte otisk svého klíče (z ssh-keygen -lf ~/.ssh/id_ed25519.pub) a odpovězte na otázky, kde je uložen Váš soukromý klíč a co uděláte, když ho ztratíte. Program kontroluje jen to, zda má otisk správný tvar; zbytek je na Vás.
Úkol O2.1: Vytvoření a použití klíče
Tento úkol provádíte sami; nikdo ho nekontroluje. Odškrtněte, co jste udělali, a označte úkol jako splněný.
Soukromý klíč zůstává na Vašem vlastním zařízení, zašifrovaný heslovou frází, ne v cloudové složce ani v e-mailu. Při krádeži odstraňte řádek daného zařízení z authorized_keys na každém serveru a vytvořte nový klíč. Svůj soukromý klíč nikdy nikam nevkládejte, ani sem.
Vaše zaškrtnutí a poznámky zůstávají pouze v tomto prohlížeči; nikam je neposíláme. Pokud jste přihlášeni, ukládáme v sekci Moje kurzy pouze to, že jste úkol splnili.
Doporučujeme k přečtení
Postupy v těchto článcích platí pro obrazovku VPS a panely WebOké; u jiných poskytovatelů to funguje podobně.
- Přihlášení k VPS přes SSH (a vytvoření SSH klíče)
- Příručka k DirectAdmin 15.2: SSH klíče a přihlašování přes SSH
- Žádný přístup k VPS: co teď?
- Manuál ssh-keygen: https://man.openbsd.org/ssh-keygen
- Poznámky k vydání OpenSSH 9.5 (ed25519 jako výchozí): https://www.openssh.org/txt/release-9.5
