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ří:
| Soubor | Příklad názvu | Kde je | Komu 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.pub | Na 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
Otevřete Terminál (pravým tlačítkem na Start › Terminál, ve Windows 10 Windows PowerShell).
Spusťte:
PowerShell ssh-keygen -t ed25519 -C "notebook-jan"Na otázku
Enter file in which to save the key (C:\stiskněte Enter. Klíč se uloží do výchozího umístění, kde ho SSH samo najde.Users\ jan/ .ssh/ id_ ed25519): Na otázku
Enter passphrasezadejte heslo ke klíči a stiskněte Enter. NaEnter same passphrase againho zopakujte. Heslo se nezobrazuje. Když necháte prázdné, klíč nebude zamčený.
Výsledek: soubory C:\ (soukromý) a id_ed25519.pub (veřejný).
macOS
Otevřete aplikaci Terminál.
Spusťte:
bash ssh-keygen -t ed25519 -C "macbook-jan"Na otázku
Enter file in which to save the keystiskněte Enter.Zadejte a zopakujte heslo ke klíči (passphrase).
Výsledek: ~/.ssh/id_ed25519 a ~/.ssh/id_ed25519.pub.
Linux
Otevřete terminál.
Spusťte:
bash ssh-keygen -t ed25519 -C "pc-jan"Na otázku
Enter file in which to save the keystiskněte Enter.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.
- Spusťte PuTTYgen.
- V části Parameters zvolte typ EdDSA a vedle něj Ed25519 (255 bits).
- 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.
- Do pole Key comment napište popisek, například
notebook-jan. - Do polí Key passphrase a Confirm passphrase zadejte heslo ke klíči.
- Klikněte na Save private key a uložte soubor, například
C:\. Tohle je soukromý klíč.Users\ <UZIVATEL>\ .ssh\ vps. ppk - 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):
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:– vypíše obsah veřejného klíče (USERPROFILE\ .ssh\ id_ ed25519. pub $env:USERPROFILEje vaše složkaC:\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
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
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í.
Připojte se k VPS heslem (PuTTY, terminál nebo konzole v prohlížeči).
Připravte složku a otevřete soubor s klíči:
bash mkdir -p ~/.ssh && chmod 700 ~/.ssh nano ~/.ssh/authorized_keysVlož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.Uložte (Ctrl+O, Enter) a zavřete editor (Ctrl+X).
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:
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:
ssh -i ~/.ssh/vps_klic [email protected]-i ~/.ssh/vps_klic– cesta k soukromému klíči (soubor bez.pub).
PuTTY:
- Spusťte PuTTY a načtěte uloženou relaci (Load), nebo vyplňte IP adresu.
- V levém stromu otevřete Connection › SSH › Auth › Credentials.
- U pole Private key file for authentication klikněte na Browse a vyberte soubor
.ppk. - Volitelně: v Connection › Data vyplňte Auto-login username
root. - Vraťte se na Session, klikněte na název relace a na Save, ať to příště nemusíte nastavovat.
- 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á):
Get-Service ssh-agent | Set-Service -StartupType Automatic
Start-Service ssh-agentSet-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):
ssh-add $env:USERPROFILE\.ssh\id_ed25519macOS
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):
Host *
UseKeychain yes
AddKeysToAgent yesUseKeychain 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:
ssh-add ~/.ssh/id_ed25519Ověř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:\, bez přípony) si uložte nastavení VPS:
Host mojevps
HostName 203.0.113.10
User root
Port 22
IdentityFile ~/.ssh/id_ed25519
IdentitiesOnly yes| Direktiva | Co dělá |
|---|---|
Host mojevps | Zkratka, kterou budete psát místo adresy. Platí pro řádky pod ní. |
HostName | Skutečná IP adresa nebo doména VPS. |
User | Uživatel, za kterého se přihlašujete. |
Port | Port SSH. Změňte, pokud jste SSH přesunuli na jiný port. |
IdentityFile | Soukromý klíč pro tuto VPS. |
IdentitiesOnly yes | Zkouš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.
Vytvořte (nebo otevřete) vlastní konfigurační soubor SSH serveru:
bash nano /etc/ssh/sshd_config.d/00-zabezpeceni.confVložte nastavení:
/etc/ ssh/ inisshd_config.d/ 00-zabezpeceni.conf PasswordAuthentication no KbdInteractiveAuthentication no PubkeyAuthentication yes PermitRootLogin prohibit-passwordPokud už v souboru máte
PermitRootLogin no(z návodu Zabezpečení nové VPS), poslední řádek vynechte.Nastavení Co dělá Doporučená hodnota Kdy 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 PasswordAuthenticationby přes něj šlo heslo zadat.noyesjen 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 sesudo.Uložte a zavřete editor.
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 nowithout-passwordje starší název proprohibit-passworda znamená totéž. Ubuntu 24.04 i Debian 13 vypisují starší název, novější verze OpenSSH vypíšouprohibit-password. Pokud jste nastavilino, uvidítepermitrootlogin 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říkazemgrep -rni "passwordauthentication" /etc/ssh/sshd_config.d/. Řádek v něm zakomentujte znakem#na začátku a kontrolu zopakujte.Restartujte SSH server:
bash systemctl restart sshSoučasné spojení zůstane otevřené.
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á.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_keysna 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_keysa 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/a soubor musí vlastnit tento uživatel.<UZIVATEL>/ .ssh/ authorized_ keys
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 -Tukazujepasswordauthentication 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:
ssh -v [email protected]-v– podrobný výpis. Hledejte řádkyOffering public key(klient klíč nabídl) aServer 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:
chmod 700 ~/.ssh && chmod 600 ~/.ssh/authorized_keys
journalctl -u ssh -n 30journalctl -u ssh -n 30– posledních 30 záznamů SSH serveru. HláškaAuthentication refused: bad ownership or modesznamená š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:
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_keysna 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 Windowstype … | ssh …, nebo ručně. - Heslo vypnete souborem
/etc/a výsledek ověříte příkazemssh/ sshd_ config. d/ 00-zabezpeceni. conf 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.