Přejít k obsahu
Pošta Kabinet Vybrat tarif

SSH klíče: jak je vytvořit, jaký typ zvolit a jak vypnout hesla

SSH klíče: jak je vytvořit, jaký typ zvolit a jak vypnout hesla

SSH klíč je dvojice souborů: soukromý klíč zůstává na vašem počítači a veřejný klíč patří na serveru do ~/.ssh/authorized_keys nebo do ovládacího panelu vašeho hostingu. Klíč vytvořte příkazem ssh-keygen -t ed25519, veřejnou část zkopírujte pomocí ssh-copy-id, přihlášení vyzkoušejte v novém okně a teprve potom vypněte přihlašování heslem. Nakonec vždy zkontrolujte skutečně platné nastavení příkazem sshd -T: na našem testovacím serveru soubor 50-cloud-init.conf potichu nechával hesla zapnutá, přestože kontrola syntaxe nehlásila žádnou chybu.

Jak jsme testovali

10. listopadu 2026 na testovacím serveru: kontejner Ubuntu 24.04.5, 2 vCPU Intel Xeon 2,1 GHz, OpenSSH 9.6p1 z balíčků Ubuntu, OpenSSL 3.0.13, puttygen a plink 0.81. Samostatná instance sshd s výchozím nastavením Ubuntu naslouchala na lokálním portu; klient a server běžely pod různými uživateli. Vygenerovali jsme šest typů klíčů, změřili generování, podepisování i celé přihlášení, postupně jsme rozbíjeli oprávnění souborů a konfiguraci sshd i klienta a zaznamenali skutečné zprávy z logů. Hardwarový klíč FIDO2 jsme k dispozici neměli. Výsledky popisují testovací server, ne produkční servery RichHost.

Stručně: od nuly k přihlášení klíčem

Na vlastním počítači (Linux, macOS nebo PowerShell ve Windows 10 a 11, které už klienta OpenSSH obsahují):

ssh-keygen -t ed25519 -C "laptop-2026"
ssh-copy-id -i ~/.ssh/id_ed25519.pub user@server
ssh -i ~/.ssh/id_ed25519 user@server

Druhý příkaz se jednou zeptá na heslo k serveru a odpoví Number of key(s) added: 1. Na testovacím serveru sám vytvořil ~/.ssh s oprávněním 700 a authorized_keys s oprávněním 600. Pokud jste se k serveru přes SSH ještě nikdy nepřipojovali, začněte naším návodem, jak se připojit přes SSH z Windows, macOS a Linuxu.

Ed25519, RSA, nebo ECDSA: co ukázala měření

Vygenerovali jsme klíče všech běžných typů a s každým jsme se na server přihlásili 15krát. Výsledky:

Typ Generování, medián Soukromý klíč Soubor .pub Podpisů za sekundu (openssl speed) Přihlášení SSH, medián
Ed25519 6 ms 399 B 91 B 21 850 211 ms
ECDSA P-256 10 ms 505 B 171 B 37 246 215 ms
RSA 3072 679 ms 2590 B 563 B 962 210 ms
RSA 4096 1599 ms 3369 B 735 B 464 217 ms

Závěr je jednoduchý: typ klíče rychlost přihlášení neovlivňuje, rozdíly jsou v rámci šumu měření. Čas připojení padne na výměnu klíčů a přípravu relace, ne na jeden podpis. Liší se velikost a pohodlí: veřejný klíč Ed25519 je jeden krátký řádek, který snadno vložíte do panelu nebo do zprávy, kdežto RSA 4096 má 700 znaků a při kopírování se rozbije častěji. Navíc je doba generování RSA náhodná: deset generování RSA 4096 trvalo od 0,7 do 3,2 sekundy.

Doba generování SSH klíčů Ed25519, ECDSA a RSA na testovacím serveru
Vygenerovat klíč RSA 4096 trvá stovkykrát déle než Ed25519, přihlášení je ale stejně rychlé

Praktické pravidlo:

  • Ed25519 pro každý nový klíč. Od OpenSSH 9.5 ho ssh-keygen vytváří, když vynecháte -t; na verzi 9.6 jsme to ověřili.
  • RSA 3072 nebo 4096 jen tehdy, když server nebo zařízení Ed25519 nepodporuje: velmi starý OpenSSH, některá síťová zařízení, zastaralé knihovny.
  • ECDSA funguje, ale pro běžné přihlašování nemá oproti Ed25519 žádnou výhodu.
  • Klíče FIDO2 (ed25519-sk) uchovávají tajemství na hardwarovém tokenu a vyžadují dotyk. Bez zařízení se ssh-keygen -t ed25519-sk na testovacím serveru zastavil s hláškou Key enrollment failed: device not found.

Heslová fráze a ssh-agent

Heslová fráze (passphrase) šifruje soukromý klíč na disku: pokud vám soubor ukradnou i s notebookem, bez fráze je k ničemu. Volba -a nastavuje počet kol KDF, tedy jak drahé je frázi uhodnout hrubou silou. Změřili jsme, jak dlouho trvá dešifrování klíče:

  • -a 16 (výchozí): 148 ms;
  • -a 100: 1,0 s;
  • -a 200: 2,0 s.

Sekunda na odemčení je téměř nepostřehnutelná, když agent dešifruje klíč jednou za pracovní den:

ssh-keygen -t ed25519 -a 100 -C "work-laptop"
eval "$(ssh-agent -s)"
ssh-add -t 8h ~/.ssh/id_ed25519
ssh-add -l

Po ssh-add prošla tři přihlášení za sebou bez jediného dotazu. Bez agenta klíč chráněný frází neinteraktivně nefunguje: náš skript dostal Permission denied (publickey,password). Ve Windows je agent služba, kterou jednou zapnete v PowerShellu spuštěném jako správce: Get-Service ssh-agent | Set-Service -StartupType Automatic, potom Start-Service ssh-agent a ssh-add.

Přidání klíče na server, do panelu hostingu a do PuTTY

Pokud ssh-copy-id nemáte (Windows ho neobsahuje), přihlaste se heslem a klíč připište ručně:

mkdir -p ~/.ssh && chmod 700 ~/.ssh
echo "ssh-ed25519 AAAA... laptop-2026" >> ~/.ssh/authorized_keys
chmod 600 ~/.ssh/authorized_keys

Každý klíč musí být přesně na jednom řádku. Když jsme řádek rozdělili na dva, jak se stává při kopírování z úzkého okna, server přihlášení potichu odmítl a v logu bylo jen Failed publickey. Soubor zkontrolujete příkazem ssh-keygen -lf ~/.ssh/authorized_keys: vypíše otisk pro každý platný řádek. Konce řádků z Windows (CRLF) sshd 9.6 přijal bez problémů.

Panel hostingu. V mnoha panelech se SSH klíče přidávají pro jednotlivé uživatele: do nastavení uživatele vložíte řádek ze svého souboru .pub a panel ho připíše do authorized_keys daného uživatele. Přihlášení přes SSH funguje jen tehdy, když má uživatel nebo jeho balíček skutečný shell, a ne nologin. Na sdíleném hostingu o tom rozhoduje poskytovatel, proto se zeptejte podpory, zda je SSH pro váš účet zapnuté. U RichHost je přístup přes SSH součástí všech tarifů.

PuTTY a FileZilla. PuTTY používá vlastní formát .ppk. Převod jsme otestovali v puttygen 0.81:

puttygen ~/.ssh/id_ed25519 -o key.ppk
puttygen key.ppk -O public-openssh
puttygen key.ppk -O private-openssh -o id_from_ppk

Soubor dostal hlavičku PuTTY-User-Key-File-3, plink se s ním přihlásil a otisk odpovídal původnímu klíči. Opačně to nefunguje: se souborem .ppk OpenSSH odpověděl Load key "key.ppk": error in libcrypto. Stejný klíč funguje i pro SFTP; nastavení klienta popisuje návod FileZilla: připojení k hostingu.

~/.ssh/config a “Too many authentication failures”

Abyste nemuseli pokaždé psát port, uživatelské jméno a cestu ke klíči, přidejte záznam do ~/.ssh/config:

Host myserver
    HostName 203.0.113.10
    Port 22
    User deploy
    IdentityFile ~/.ssh/id_ed25519
    IdentitiesOnly yes

Teď stačí ssh myserver a ssh -G myserver ukáže skutečně použité hodnoty. Řádek IdentitiesOnly yes je důležitý: do agenta jsme nahráli šest nesouvisejících klíčů a připojovali se správným klíčem přes -i. Klient nejdřív zkoušel klíče z agenta a server s výchozím MaxAuthTries 6 spojení ukončil hláškou Too many authentication failures. S IdentitiesOnly yes přihlášení prošlo hned. I samotný konfigurační soubor musí být soukromý: s oprávněním 666 klient odmítl pracovat (Bad owner or permissions).

Oprávnění: co sshd myslí hláškou “bad ownership or modes”

StrictModes yes (výchozí) způsobí, že sshd klíč ignoruje, pokud by soubory mohli měnit jiní uživatelé. Klient vidí jen Permission denied (publickey); důvod je v logu serveru. Co jsme dostali:

Stav na serveru Výsledek
authorized_keys 600 nebo 644 přihlášení funguje
authorized_keys 666 Authentication refused: bad ownership or modes for file
authorized_keys patří jinému uživateli stejná hláška
~/.ssh 755 přihlášení funguje
~/.ssh 777 nebo domovský adresář 777 bad ownership or modes for directory
~/.ssh patří rootovi Could not open user ... authorized keys: Permission denied

Specialita Ubuntu a Debianu: sshd přijal oprávnění 664 u authorized_keys a 775 u domovského adresáře, protože skupinou byla soukromá skupina uživatele. Jakmile byl soubor přiřazen jiné skupině se stejným oprávněním 664, přihlášení se zablokovalo. Jednoduché pravidlo: ~/.ssh 700, soubory uvnitř 600, vlastníkem jste vy. Klient je ještě přísnější: soukromý klíč s oprávněním 644 ignoruje a vypíše UNPROTECTED PRIVATE KEY FILE.

Vypnutí přihlašování heslem a kontrola přes sshd -T

Nechte současnou relaci otevřenou, dokud přihlášení klíčem nebude fungovat v novém okně. Nastavení uložte do samostatného souboru, jehož název se seřadí před ostatní:

# /etc/ssh/sshd_config.d/01-hardening.conf
PasswordAuthentication no
KbdInteractiveAuthentication no
PermitRootLogin no
sudo sshd -t
sudo sshd -T | grep -E '^(passwordauthentication|kbdinteractiveauthentication|permitrootlogin) '
sudo systemctl reload ssh

V Ubuntu a Debianu se služba jmenuje ssh, v systémech typu RHEL sshd. Proč samostatný soubor s předponou 01: sshd použije první nalezenou hodnotu nastavení a řádek Include je na začátku hlavní konfigurace. Na testovacím serveru jsme zopakovali tři pasti:

  1. 50-cloud-init.conf s PasswordAuthentication yes (cloud-init ho vytváří na mnoha cloudových obrazech) a k tomu náš vlastní 99-hardening.conf: sshd -t nehlásil chyby, sshd -T ukázal passwordauthentication yes a přihlášení heslem prošlo.
  2. PasswordAuthentication no připsané na konec hlavního sshd_config, jak radí mnoho starších návodů: stejný výsledek, hesla dál fungovala.
  3. PasswordAuthentication no, ale KbdInteractiveAuthentication yes spolu s UsePAM yes: server metodu password odmítl, stejné heslo ale přijal přes keyboard-interactive a do logu zapsal Accepted keyboard-interactive/pam.

Soubor 01-hardening.conf vyřešil všechny tři případy. Pokud vaše konfigurace obsahuje bloky Match, otestujte konkrétní připojení: u nás sshd -T vypsal no, zatímco sshd -T -C user=deploy,host=x,addr=127.0.0.1 vypsal yes pro adresu, na kterou se vztahoval Match Address. Kompletní kontrolní seznam první hodiny na novém serveru najdete v návodu nastavení VPS s Ubuntu.

Chyby SSH klíčů: příčina a řešení

Chyba Příčina Řešení
Permission denied (publickey) Klíč není v authorized_keys správného uživatele, řádek je poškozený nebo sshd soubor kvůli oprávněním ignoruje Zkontrolovat log serveru, spustit ssh-keygen -lf ~/.ssh/authorized_keys, ověřit uživatelské jméno
bad ownership or modes for file / directory Do souboru nebo adresáře mohou zapisovat ostatní chmod 700 ~/.ssh, chmod 600 ~/.ssh/authorized_keys, vlastníkem jste vy
UNPROTECTED PRIVATE KEY FILE Soukromý klíč mohou číst ostatní chmod 600 ~/.ssh/id_ed25519
Too many authentication failures Agent nabízí příliš mnoho klíčů IdentitiesOnly yes a IdentityFile v configu
Load key ...: error in libcrypto OpenSSH dostal soubor .ppk puttygen key.ppk -O private-openssh -o id_key
incorrect passphrase supplied Špatná heslová fráze Zadat správnou; zapomenutou frázi nelze obnovit, vytvořte nový klíč
REMOTE HOST IDENTIFICATION HAS CHANGED Klíč serveru se změnil: reinstalace nebo odposlech Ověřit otisk u poskytovatele, potom ssh-keygen -R host
Heslo funguje i po PasswordAuthentication no Hodnotu dřív nastavil jiný soubor, nebo je zapnuté keyboard-interactive 01-hardening.conf, ověřit přes sshd -T
Key enrollment failed: device not found Klíč -sk bez připojeného tokenu FIDO2 Připojit token nebo použít Ed25519

Co dělat ve vaší situaci

Když Udělejte toto
Vytváříte svůj první klíč Ed25519 s heslovou frází a -a 100, ssh-agent na pracovní relaci
Server nebo zařízení odmítá Ed25519 RSA 3072 nebo 4096, samostatný klíč jen pro ně
Pracujete z více počítačů Jeden klíč na zařízení se srozumitelným komentářem -C, abyste mohli zrušit jediný řádek
Máte čerstvě spuštěný VPS Klíč, zkušební přihlášení, 01-hardening.conf, sshd -T a teprve potom zavřít starou relaci
Máte sdílený hosting s panelem Přidat klíč pro svého uživatele v panelu, zeptat se podpory na přístup přes SSH
Windows a PuTTY Vestavěný OpenSSH v PowerShellu, nebo převod do .ppk v puttygen

U tarifů sdíleného hostingu RichHost spravujete weby ve vlastním ovládacím panelu s asistentem AI a podpora pomáhá s dotazy k přístupu od 10:00 do 20:00 kyjevského času.

Časté otázky

Mohu používat jeden klíč pro všechny servery?

Technicky ano, lepší je ale jeden klíč pro každé zařízení, ze kterého se přihlašujete. Ztracený notebook pak znamená smazat jeden řádek z authorized_keys, ne měnit klíč všude.

Kde je soukromý klíč a mohu ho dát kolegovi?

V ~/.ssh (ve Windows C:\Users\name\.ssh). Nikdy ho nesdílejte: kolega si vytvoří vlastní pár klíčů a vy přidáte jeho veřejný klíč na server.

Vypnul jsem hesla a ztratil klíč. Co teď?

Přihlaste se přes webovou konzoli nebo KVM v panelu poskytovatele, přidejte nový veřejný klíč a znovu načtěte sshd. Na sdíleném hostingu můžete klíč znovu přidat v panelu nebo požádat o pomoc podporu.

Mám změnit port 22?

Sníží to šum v logu, ale ochrana to není. Skutečnou ochranu dává přihlašování pouze klíčem s vypnutými hesly, ověřené přes sshd -T.

Více k tématu

Všechny články
Staging WordPressu: jak ho vytvořit, skrýt a přenést změny
Návody a tutoriály k hostingu28.07.2026

Staging WordPressu: jak ho vytvořit, skrýt a přenést změny

Jak postavit testovací web (staging) WordPressu na subdoméně: kopie souborů a databáze, wp search-replace místo sed, heslo a noindex, žádné e-maily ani…

IPv6 pro web: co přináší, co se rozbije a kontrolní seznam
Domény a DNS04.07.2026

IPv6 pro web: co přináší, co se rozbije a kontrolní seznam

Co IPv6 přináší webu a co se rozbije, když záznam AAAA existuje, ale server připravený není: listen, ip6tables, certifikát, Let's Encrypt, PHP,…

Nastavení Fail2Ban a CSF: jaily pro SSH, nginx a WordPress v testu
Návody a tutoriály k hostingu01.07.2026

Nastavení Fail2Ban a CSF: jaily pro SSH, nginx a WordPress v testu

Jak nastavit Fail2Ban pro SSH, nginx a WordPress, co skutečně blokuje a šest pastí: zablokování sebe sama, IPv6, journald, Cloudflare a změněná…