Přejít na obsah
Aktuální kupón:sleva 10 %Uplatnit v objednávce

SSH klíč: přihlášení bez hesla (ed25519, PuTTYgen)

Vytvoříte si SSH klíč ed25519, nahrajete ho na VPS a bezpečně vypnete přihlašování heslem. Postup pro Windows, macOS, Linux i PuTTY, včetně ssh-agenta a souboru ~/.ssh/config.

  • začátečník
  • ~15 min
  • Aktualizováno 1. 10. 2026

Vytvoříte si SSH klíč, nahrajete ho na VPS a budete se přihlašovat bez hesla. Nakonec přihlašování heslem vypnete, takže hádání hesel přestane mít smysl. Postup je pro Windows, macOS, Linux i PuTTY.

Co budete potřebovat

  • VPS u StormHostu s Ubuntu 24.04 nebo Debianem 13
  • Funkční připojení přes SSH heslem (návod)
  • Počítač s Windows 10/11, macOS nebo Linuxem
  • Asi 15 minut

Jak SSH klíč funguje#

SSH klíč tvoří dva soubory, které k sobě patří:

SouborPříklad názvuKde jeKomu ho dát
Soukromý klíčid_ed25519 (PuTTY: .ppk)Jen ve vašem počítači.Nikomu. Kdo ho má, přihlásí se jako vy.
Veřejný klíčid_ed25519.pubNa VPS v souboru ~/.ssh/authorized_keys.Můžete ho dát kamkoli, zneužít nejde.

Při přihlášení VPS pošle vašemu počítači úlohu, kterou umí vyřešit jen držitel soukromého klíče. Soukromý klíč přitom nikdy neopustí váš počítač. Klíč typu ed25519 je moderní, krátký a bezpečný a podporují ho všechny současné systémy.

Soukromý klíč můžete navíc zamknout heslem ke klíči (passphrase). Když vám někdo zkopíruje soubor s klíčem, bez tohoto hesla ho nepoužije.

Vytvoření klíče#

Windows

  1. Otevřete Terminál (pravým tlačítkem na Start › Terminál, ve Windows 10 Windows PowerShell).

  2. Spusťte:

    PowerShell
    ssh-keygen -t ed25519 -C "notebook-jan"
  3. Na otázku Enter file in which to save the key (C:\Users\jan/.ssh/id_ed25519): stiskněte Enter. Klíč se uloží do výchozího umístění, kde ho SSH samo najde.

  4. Na otázku Enter passphrase zadejte heslo ke klíči a stiskněte Enter. Na Enter same passphrase again ho zopakujte. Heslo se nezobrazuje. Když necháte prázdné, klíč nebude zamčený.

Výsledek: soubory C:\Users\<UZIVATEL>\.ssh\id_ed25519 (soukromý) a id_ed25519.pub (veřejný).

macOS

  1. Otevřete aplikaci Terminál.

  2. Spusťte:

    bash
    ssh-keygen -t ed25519 -C "macbook-jan"
  3. Na otázku Enter file in which to save the key stiskněte Enter.

  4. Zadejte a zopakujte heslo ke klíči (passphrase).

Výsledek: ~/.ssh/id_ed25519 a ~/.ssh/id_ed25519.pub.

Linux

  1. Otevřete terminál.

  2. Spusťte:

    bash
    ssh-keygen -t ed25519 -C "pc-jan"
  3. Na otázku Enter file in which to save the key stiskněte Enter.

  4. Zadejte a zopakujte heslo ke klíči (passphrase).

Výsledek: ~/.ssh/id_ed25519 a ~/.ssh/id_ed25519.pub.

Co příkaz dělá:

  • ssh-keygen – program na vytváření SSH klíčů.
  • -t ed25519 – typ klíče. Ed25519 doporučujeme. Starší typ RSA použijte jen pro zařízení, která ed25519 neumí, a pak s délkou -t rsa -b 4096.
  • -C "notebook-jan" – popisek (komentář) na konci veřejného klíče. Podle něj na VPS poznáte, ze kterého počítače klíč je. Popisek nic nezabezpečuje, je jen pro orientaci.

Klíč už máte?

Když ssh-keygen napíše … already exists. Overwrite (y/n)?, odpovězte n. Přepsáním byste ztratili starý klíč a přístup všude, kde ho používáte. Starý klíč klidně použijte i pro VPS.

Vytvoření klíče v PuTTYgen#

Pokud se připojujete přes PuTTY, vytvořte klíč v programu PuTTYgen, který se instaluje spolu s PuTTY.

  1. Spusťte PuTTYgen.
  2. V části Parameters zvolte typ EdDSA a vedle něj Ed25519 (255 bits).
  3. Klikněte na Generate a pohybujte myší v prázdné ploše okna, dokud se nenaplní ukazatel průběhu. Pohyb myši slouží jako zdroj náhody.
  4. Do pole Key comment napište popisek, například notebook-jan.
  5. Do polí Key passphrase a Confirm passphrase zadejte heslo ke klíči.
  6. Klikněte na Save private key a uložte soubor, například C:\Users\<UZIVATEL>\.ssh\vps.ppk. Tohle je soukromý klíč.
  7. Označte a zkopírujte celý text v poli Public key for pasting into OpenSSH authorized_keys file. Začíná ssh-ed25519 AAAA… a končí popiskem. Tohle je veřejný klíč, který nahrajete na VPS ručně (viz záložka Ručně níže).

Tlačítko Save public key ukládá veřejný klíč v jiném formátu, který VPS nepřijme. Vždy kopírujte text z pole.

Nahrání veřejného klíče na VPS#

Windows

Windows nemá příkaz ssh-copy-id. Stejnou práci udělá tento příkaz v PowerShellu (za 203.0.113.10 dosaďte IP adresu VPS):

PowerShell
type $env:USERPROFILE\.ssh\id_ed25519.pub | ssh [email protected] "mkdir -p ~/.ssh && chmod 700 ~/.ssh && cat >> ~/.ssh/authorized_keys && chmod 600 ~/.ssh/authorized_keys"
  • type $env:USERPROFILE\.ssh\id_ed25519.pub – vypíše obsah veřejného klíče ($env:USERPROFILE je vaše složka C:\Users\<UZIVATEL>).
  • | – pošle výpis jako vstup dalšímu příkazu.
  • ssh [email protected] "…" – připojí se na VPS (zeptá se na root heslo) a spustí příkazy v uvozovkách.
  • mkdir -p ~/.ssh – vytvoří složku .ssh, pokud ještě neexistuje.
  • chmod 700 ~/.ssh – složku smí otevřít jen vlastník. SSH příliš otevřená práva odmítá.
  • cat >> ~/.ssh/authorized_keys – připojí klíč na konec souboru. Klíče, které tam už jsou, zůstanou.
  • chmod 600 ~/.ssh/authorized_keys – soubor smí číst a měnit jen vlastník.

macOS

bash
ssh-copy-id -i ~/.ssh/id_ed25519.pub [email protected]
  • ssh-copy-id – nahraje veřejný klíč na server a nastaví správná práva.
  • -i ~/.ssh/id_ed25519.pub – který klíč nahrát.
  • [email protected] – uživatel a adresa VPS.

Zeptá se na root heslo a nakonec vypíše Number of key(s) added: 1.

Linux

bash
ssh-copy-id -i ~/.ssh/id_ed25519.pub [email protected]
  • ssh-copy-id – nahraje veřejný klíč na server a nastaví správná práva.
  • -i ~/.ssh/id_ed25519.pub – který klíč nahrát.

Zeptá se na root heslo a nakonec vypíše Number of key(s) added: 1.

Ručně

Hodí se pro klíč z PuTTYgenu nebo když vám předchozí postupy nefungují.

  1. Připojte se k VPS heslem (PuTTY, terminál nebo konzole v prohlížeči).

  2. Připravte složku a otevřete soubor s klíči:

    bash
    mkdir -p ~/.ssh && chmod 700 ~/.ssh
    nano ~/.ssh/authorized_keys
  3. Vložte veřejný klíč na samostatný řádek (v PuTTY pravým tlačítkem myši). Celý klíč musí být na jednom řádku: ssh-ed25519 AAAA… popisek.

  4. Uložte (Ctrl+O, Enter) a zavřete editor (Ctrl+X).

  5. Nastavte práva:

    bash
    chmod 600 ~/.ssh/authorized_keys

Přihlášení klíčem#

Klíč ve výchozím umístění (id_ed25519) najde SSH klient sám, stačí běžný příkaz:

bash
ssh [email protected]

Pokud jste klíči nastavili heslo, klient se zeptá Enter passphrase for key. Zadáte heslo ke klíči, ne root heslo.

Klíč uložený jinde nebo pod jiným názvem zadáte přepínačem -i:

bash
ssh -i ~/.ssh/vps_klic [email protected]
  • -i ~/.ssh/vps_klic – cesta k soukromému klíči (soubor bez .pub).

PuTTY:

  1. Spusťte PuTTY a načtěte uloženou relaci (Load), nebo vyplňte IP adresu.
  2. V levém stromu otevřete Connection › SSH › Auth › Credentials.
  3. U pole Private key file for authentication klikněte na Browse a vyberte soubor .ppk.
  4. Volitelně: v Connection › Data vyplňte Auto-login username root.
  5. Vraťte se na Session, klikněte na název relace a na Save, ať to příště nemusíte nastavovat.
  6. Klikněte na Open.

Klíč z ssh-keygen můžete v PuTTY použít také: v PuTTYgenu klikněte na Load, vyberte soubor id_ed25519 (přepněte filtr souborů na All Files) a uložte ho přes Save private key jako .ppk. Opačně převedete klíč z PuTTYgenu do formátu OpenSSH přes Conversions › Export OpenSSH key.

ssh-agent: heslo ke klíči jen jednou#

ssh-agent si odemčený klíč pamatuje, takže heslo ke klíči nezadáváte při každém připojení.

Windows

V PowerShellu spuštěném jako správce zapněte službu agenta (ve výchozím stavu je vypnutá):

PowerShell
Get-Service ssh-agent | Set-Service -StartupType Automatic
Start-Service ssh-agent
  • Set-Service -StartupType Automatic – agent se bude spouštět se systémem.
  • Start-Service ssh-agent – spustí agenta hned.

Pak v běžném okně přidejte klíč (zeptá se na heslo ke klíči):

PowerShell
ssh-add $env:USERPROFILE\.ssh\id_ed25519

macOS

bash
ssh-add --apple-use-keychain ~/.ssh/id_ed25519
  • --apple-use-keychain – uloží heslo ke klíči do Klíčenky macOS.

Aby SSH heslo z Klíčenky použilo samo i po restartu Macu, přidejte na začátek souboru ~/.ssh/config (viz další sekce):

~/.ssh/configtext
Host *
    UseKeychain yes
    AddKeysToAgent yes
  • UseKeychain yes – heslo ke klíči se načte z Klíčenky (jen macOS).
  • AddKeysToAgent yes – odemčený klíč se při prvním použití přidá do agenta.

Linux

Většina desktopových prostředí agenta spouští sama. Klíč přidáte příkazem:

bash
ssh-add ~/.ssh/id_ed25519

Ověření: ssh-add -l vypíše otisky klíčů, které má agent načtené.

Soubor ~/.ssh/config: připojení jedním slovem#

Do souboru config ve složce .ssh (Windows: C:\Users\<UZIVATEL>\.ssh\config, bez přípony) si uložte nastavení VPS:

~/.ssh/configtext
Host mojevps
    HostName 203.0.113.10
    User root
    Port 22
    IdentityFile ~/.ssh/id_ed25519
    IdentitiesOnly yes
DirektivaCo dělá
Host mojevpsZkratka, kterou budete psát místo adresy. Platí pro řádky pod ní.
HostNameSkutečná IP adresa nebo doména VPS.
UserUživatel, za kterého se přihlašujete.
PortPort SSH. Změňte, pokud jste SSH přesunuli na jiný port.
IdentityFileSoukromý klíč pro tuto VPS.
IdentitiesOnly yesZkoušet jen klíč z IdentityFile, ne všechny klíče z agenta. Předejdete chybě Too many authentication failures.

Pak se připojíte příkazem ssh mojevps. Zkratku používají i scp a sftp.

Vypnutí přihlašování heslem#

Dokud je přihlašování heslem zapnuté, boti ho můžou dál zkoušet. Po vypnutí VPS přijme jen klíč.

Co vypnutí hesla ovlivní v zákaznické zóně

Záložky Soubory a Databáze se k VPS přihlašují heslem. Po vypnutí hesla přestanou fungovat. Soubory pak přenášejte SFTP klientem s klíčem (WinSCP i FileZilla klíč umí) a databázi spravujte přes SSH tunel. Konzole v prohlížeči funguje dál. Přehled všech dopadů je v návodu Zabezpečení nové VPS.

Nejdřív ověřte, že přihlášení klíčem funguje

Pokud vypnete heslo a klíč nefunguje, přes SSH se nepřihlásíte. Než budete pokračovat, otevřete nové okno a přihlaste se klíčem bez zadání root hesla. Původní okno nechte celou dobu otevřené. Kdyby se přesto něco pokazilo, přihlaste se přes konzoli v prohlížeči root heslem a soubor z kroku 1 smažte.

  1. Vytvořte (nebo otevřete) vlastní konfigurační soubor SSH serveru:

    bash
    nano /etc/ssh/sshd_config.d/00-zabezpeceni.conf
  2. Vložte nastavení:

    /etc/ssh/sshd_config.d/00-zabezpeceni.confini
    PasswordAuthentication no
    KbdInteractiveAuthentication no
    PubkeyAuthentication yes
    PermitRootLogin prohibit-password

    Pokud už v souboru máte PermitRootLogin no (z návodu Zabezpečení nové VPS), poslední řádek vynechte.

    NastaveníCo děláDoporučená hodnotaKdy změnit
    PasswordAuthenticationPovoluje přihlášení heslem.noNikdy, pokud chcete mít heslo vypnuté.
    KbdInteractiveAuthenticationJiný způsob zadání hesla (interaktivní výzva). I s vypnutým PasswordAuthentication by přes něj šlo heslo zadat.noyes jen pro dvoufázové ověření přes PAM (pokročilé).
    PubkeyAuthenticationPovoluje přihlášení klíčem. Výchozí hodnota je yes, uvádíme ji pro jistotu.yesNikdy.
    PermitRootLoginPřihlášení roota. prohibit-password = root jen klíčem.prohibit-passwordno, pokud pracujete pod vlastním uživatelem se sudo.
  3. Uložte a zavřete editor.

  4. Zkontrolujte, že platí právě vaše hodnoty:

    bash
    sshd -t && sshd -T | grep -Ei "^(passwordauthentication|kbdinteractiveauthentication|pubkeyauthentication|permitrootlogin)"
    • sshd -t – kontrola syntaxe konfigurace. Při chybě vypíše soubor a řádek a další příkaz se nespustí.
    • sshd -T – vypíše výslednou platnou konfiguraci po načtení všech souborů.
    • grep -Ei "…" – vybere jen čtyři sledovaná nastavení.

    Výstup musí obsahovat tyto čtyři řádky (pořadí se může lišit):

    Výstuptext
    permitrootlogin without-password
    pubkeyauthentication yes
    passwordauthentication no
    kbdinteractiveauthentication no

    without-password je starší název pro prohibit-password a znamená totéž. Ubuntu 24.04 i Debian 13 vypisují starší název, novější verze OpenSSH vypíšou prohibit-password. Pokud jste nastavili no, uvidíte permitrootlogin no.

    Když některý řádek ukazuje jinou hodnotu (typicky passwordauthentication yes), stejné nastavení je v souboru, který se načítá dřív. Najdete ho příkazem grep -rni "passwordauthentication" /etc/ssh/sshd_config.d/. Řádek v něm zakomentujte znakem # na začátku a kontrolu zopakujte.

  5. Restartujte SSH server:

    bash
    systemctl restart ssh

    Současné spojení zůstane otevřené.

  6. V novém okně zkuste přihlášení vynutit heslem:

    bash
    ssh -o PubkeyAuthentication=no [email protected]

    Server musí odpovědět Permission denied (publickey). To je správně: heslo už nepřijímá.

  7. V dalším okně se přihlaste normálně klíčem (ssh [email protected]). Teprve když to funguje, zavřete původní okno.

Proč soubor 00-⁠zabezpeceni.conf

SSH server čte nejdřív soubory ze složky /etc/ssh/sshd_config.d/ (podle abecedy) a pak hlavní /etc/ssh/sshd_config. U každého nastavení platí první nalezená hodnota. Na VPS může být soubor jako 50-cloud-init.conf s PasswordAuthentication yes. Díky číslu 00 se váš soubor načte dřív a jeho hodnoty vyhrají. Kontrola přes sshd -T vám to vždy potvrdí.

Více počítačů, odebrání a záloha klíče#

  • Další počítač: vytvořte na něm vlastní klíč s jiným popiskem a nahrajte ho stejně. Každý klíč je v ~/.ssh/authorized_keys na samostatném řádku. Kopírovat jeden soukromý klíč mezi počítači nedoporučujeme.
  • Odebrání klíče (ztracený notebook, odchod kolegy): otevřete nano ~/.ssh/authorized_keys a smažte řádek s jeho popiskem. Platí okamžitě.
  • Záloha: soukromý klíč si uložte do správce hesel nebo na šifrované úložiště. Když ho ztratíte a heslo máte vypnuté, přihlaste se přes konzoli v prohlížeči a nahrajte nový veřejný klíč.
  • Jiný uživatel než root: klíč patří do /home/<UZIVATEL>/.ssh/authorized_keys a soubor musí vlastnit tento uživatel.

Ověření#

  • ssh root@<IP_ADRESA_VPS> vás přihlásí bez root hesla (nanejvýš se zeptá na heslo ke klíči).
  • ssh -o PubkeyAuthentication=no root@<IP_ADRESA_VPS> skončí Permission denied (publickey).
  • sshd -T ukazuje passwordauthentication no.

Když něco nefunguje#

VPS se pořád ptá na root heslo#

Klíč se nepoužil. Spusťte připojení s podrobným výpisem:

bash
ssh -v [email protected]
  • -v – podrobný výpis. Hledejte řádky Offering public key (klient klíč nabídl) a Server accepts key (server ho přijal).

Když klient klíč nenabízí, je v jiném souboru: použijte -i nebo IdentityFile. Když ho server nepřijímá, zkontrolujte na VPS práva:

bash
chmod 700 ~/.ssh && chmod 600 ~/.ssh/authorized_keys
journalctl -u ssh -n 30
  • journalctl -u ssh -n 30 – posledních 30 záznamů SSH serveru. Hláška Authentication refused: bad ownership or modes znamená špatná práva nebo vlastníka složky .ssh.

Zkontrolujte také, že je klíč v authorized_keys na jednom řádku a začíná ssh-ed25519.

Permission denied (publickey).#

Heslo je vypnuté a klíč server nepřijal. Postupujte jako v předchozím bodě. Pokud se nepřihlásíte vůbec, použijte konzoli v prohlížeči.

Windows: WARNING: UNPROTECTED PRIVATE KEY FILE! nebo Bad permissions#

K soukromému klíči mají přístup i jiní uživatelé počítače (typicky po zkopírování z jiného místa) a klient ho odmítne použít. Nastavte práva v PowerShellu:

PowerShell
icacls $env:USERPROFILE\.ssh\id_ed25519 /inheritance:r
icacls $env:USERPROFILE\.ssh\id_ed25519 /grant:r "$($env:USERNAME):(R)"
  • /inheritance:r – odebere práva zděděná ze složky.
  • /grant:r "<UZIVATEL>:(R)" – nastaví jen vašemu účtu právo číst.

Na macOS a Linuxu stejnou chybu opravíte příkazem chmod 600 ~/.ssh/id_ed25519.

Load key "…": invalid format#

Snažíte se v OpenSSH použít klíč ve formátu PuTTY (.ppk). Převeďte ho v PuTTYgenu přes Conversions › Export OpenSSH key.

PuTTY: Server refused our key#

Na VPS není správný veřejný klíč. Zkopírujte znovu text z pole Public key for pasting into OpenSSH authorized_keys file (ne soubor ze Save public key) a vložte ho do ~/.ssh/authorized_keys na jeden řádek.

Too many authentication failures#

Agent nabízí moc klíčů. Použijte IdentitiesOnly yes v ~/.ssh/config, nebo přepínače -i ~/.ssh/id_ed25519 -o IdentitiesOnly=yes.

Shrnutí

  • Soukromý klíč zůstává jen ve vašem počítači, veřejný klíč patří do ~/.ssh/authorized_keys na VPS.
  • Klíč vytvoříte příkazem ssh-keygen -t ed25519 -C "popisek" nebo v PuTTYgenu (EdDSA, Ed25519).
  • Nahrání: ssh-copy-id (macOS, Linux), ve Windows type … | ssh …, nebo ručně.
  • Heslo vypnete souborem /etc/ssh/sshd_config.d/00-zabezpeceni.conf a výsledek ověříte příkazem sshd -T.
  • Před zavřením původního okna vždy otestujte přihlášení klíčem v novém okně.
  • Vypnuté heslo vypne i záložky Soubory a Databáze; konzole funguje dál.

Hledání v návodech