Vytvoríte si SSH kľúč, nahráte ho na VPS a budete sa prihlasovať bez hesla. Nakoniec prihlasovanie heslom vypnete, takže hádanie hesiel prestane mať zmysel. Postup je pre Windows, macOS, Linux aj PuTTY.
Čo budete potrebovať
- VPS u StormHostu s Ubuntu 24.04 alebo Debianom 13
- Funkčné pripojenie cez SSH heslom (návod)
- Počítač s Windows 10/11, macOS alebo Linuxom
- Približne 15 minút
Ako SSH kľúč funguje#
SSH kľúč tvoria dva súbory, ktoré k sebe patria:
| Súbor | Príklad názvu | Kde je | Komu ho dať |
|---|---|---|---|
| Súkromný kľúč | id_ed25519 (PuTTY: .ppk) | Iba vo vašom počítači. | Nikomu. Kto ho má, prihlási sa ako vy. |
| Verejný kľúč | id_ed25519.pub | Na VPS v súbore ~/.ssh/authorized_keys. | Môžete ho dať kamkoľvek, zneužiť sa nedá. |
Pri prihlásení VPS pošle vášmu počítaču úlohu, ktorú dokáže vyriešiť iba držiteľ súkromného kľúča. Súkromný kľúč pritom nikdy neopustí váš počítač. Kľúč typu ed25519 je moderný, krátky a bezpečný a podporujú ho všetky súčasné systémy.
Súkromný kľúč môžete navyše zamknúť heslom ku kľúču (passphrase). Keď vám niekto skopíruje súbor s kľúčom, bez tohto hesla ho nepoužije.
Vytvorenie kľúča#
Windows
Otvorte Terminál (pravým tlačidlom na Štart › Terminál, vo Windows 10 Windows PowerShell).
Spustite:
PowerShell ssh-keygen -t ed25519 -C "notebook-jan"Na otázku
Enter file in which to save the key (C:\stlačte Enter. Kľúč sa uloží do predvoleného umiestnenia, kde ho SSH samo nájde.Users\ jan/ .ssh/ id_ ed25519): Na otázku
Enter passphrasezadajte heslo ku kľúču a stlačte Enter. NaEnter same passphrase againho zopakujte. Heslo sa nezobrazuje. Keď necháte prázdne, kľúč nebude zamknutý.
Výsledok: súbory C:\ (súkromný) a id_ed25519.pub (verejný).
macOS
Otvorte aplikáciu Terminál.
Spustite:
bash ssh-keygen -t ed25519 -C "macbook-jan"Na otázku
Enter file in which to save the keystlačte Enter.Zadajte a zopakujte heslo ku kľúču (passphrase).
Výsledok: ~/.ssh/id_ed25519 a ~/.ssh/id_ed25519.pub.
Linux
Otvorte terminál.
Spustite:
bash ssh-keygen -t ed25519 -C "pc-jan"Na otázku
Enter file in which to save the keystlačte Enter.Zadajte a zopakujte heslo ku kľúču (passphrase).
Výsledok: ~/.ssh/id_ed25519 a ~/.ssh/id_ed25519.pub.
Čo príkaz robí:
ssh-keygen– program na vytváranie SSH kľúčov.-t ed25519– typ kľúča. Ed25519 odporúčame. Starší typ RSA použite iba pre zariadenia, ktoré ed25519 nevedia, a potom s dĺžkou-t rsa -b 4096.-C "notebook-jan"– popis (komentár) na konci verejného kľúča. Podľa neho na VPS spoznáte, z ktorého počítača kľúč je. Popis nič nezabezpečuje, je iba na orientáciu.
Kľúč už máte?
Keď ssh-keygen napíše … already exists. Overwrite (y/n)?, odpovedzte n. Prepísaním by ste stratili starý kľúč a prístup všade, kde ho používate. Starý kľúč pokojne použite aj pre VPS.
Vytvorenie kľúča v PuTTYgen#
Ak sa pripájate cez PuTTY, vytvorte kľúč v programe PuTTYgen, ktorý sa inštaluje spolu s PuTTY.
- Spustite PuTTYgen.
- V časti Parameters zvoľte typ EdDSA a vedľa neho Ed25519 (255 bits).
- Kliknite na Generate a pohybujte myšou v prázdnej ploche okna, kým sa nenaplní ukazovateľ priebehu. Pohyb myši slúži ako zdroj náhody.
- Do poľa Key comment napíšte popis, napríklad
notebook-jan. - Do polí Key passphrase a Confirm passphrase zadajte heslo ku kľúču.
- Kliknite na Save private key a uložte súbor, napríklad
C:\. Toto je súkromný kľúč.Users\ <UZIVATEL>\ .ssh\ vps. ppk - Označte a skopírujte celý text v poli Public key for pasting into OpenSSH authorized_keys file. Začína
ssh-ed25519 AAAA…a končí popisom. Toto je verejný kľúč, ktorý nahráte na VPS ručne (pozri záložku Ručne nižšie).
Tlačidlo Save public key ukladá verejný kľúč v inom formáte, ktorý VPS neprijme. Vždy kopírujte text z poľa.
Nahranie verejného kľúča na VPS#
Windows
Windows nemá príkaz ssh-copy-id. Rovnakú prácu urobí tento príkaz v PowerShelli (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 verejného kľúča (USERPROFILE\ .ssh\ id_ ed25519. pub $env:USERPROFILEje váš priečinokC:\Users\<UZIVATEL>).|– pošle výpis ako vstup ďalšiemu príkazu.ssh [email protected] "…"– pripojí sa na VPS (opýta sa na root heslo) a spustí príkazy v úvodzovkách.mkdir -p ~/.ssh– vytvorí priečinok.ssh, ak ešte neexistuje.chmod 700 ~/.ssh– priečinok smie otvoriť iba vlastník. SSH príliš otvorené práva odmieta.cat >> ~/.ssh/authorized_keys– pripojí kľúč na koniec súboru. Kľúče, ktoré tam už sú, zostanú.chmod 600 ~/.ssh/authorized_keys– súbor smie čítať a meniť iba vlastník.
macOS
ssh-copy-id -i ~/.ssh/id_ed25519.pub [email protected]ssh-copy-id– nahrá verejný kľúč na server a nastaví správne práva.-i ~/.ssh/id_ed25519.pub– ktorý kľúč nahrať.[email protected]– používateľ a adresa VPS.
Opýta sa na root heslo a nakoniec vypíše Number of key(s) added: 1.
Linux
ssh-copy-id -i ~/.ssh/id_ed25519.pub [email protected]ssh-copy-id– nahrá verejný kľúč na server a nastaví správne práva.-i ~/.ssh/id_ed25519.pub– ktorý kľúč nahrať.
Opýta sa na root heslo a nakoniec vypíše Number of key(s) added: 1.
Ručne
Hodí sa pre kľúč z PuTTYgenu alebo keď vám predchádzajúce postupy nefungujú.
Pripojte sa k VPS heslom (PuTTY, terminál alebo konzola v prehliadači).
Pripravte priečinok a otvorte súbor s kľúčmi:
bash mkdir -p ~/.ssh && chmod 700 ~/.ssh nano ~/.ssh/authorized_keysVložte verejný kľúč na samostatný riadok (v PuTTY pravým tlačidlom myši). Celý kľúč musí byť na jednom riadku:
ssh-ed25519 AAAA… popisek.Uložte (Ctrl+O, Enter) a zatvorte editor (Ctrl+X).
Nastavte práva:
bash chmod 600 ~/.ssh/authorized_keys
Prihlásenie kľúčom#
Kľúč v predvolenom umiestnení (id_ed25519) nájde SSH klient sám, stačí bežný príkaz:
ssh [email protected]Ak ste kľúču nastavili heslo, klient sa opýta Enter passphrase for key. Zadáte heslo ku kľúču, nie root heslo.
Kľúč uložený inde alebo pod iným názvom zadáte prepínačom -i:
ssh -i ~/.ssh/vps_klic [email protected]-i ~/.ssh/vps_klic– cesta k súkromnému kľúču (súbor bez.pub).
PuTTY:
- Spustite PuTTY a načítajte uloženú reláciu (Load), alebo vyplňte IP adresu.
- V ľavom strome otvorte Connection › SSH › Auth › Credentials.
- Pri poli Private key file for authentication kliknite na Browse a vyberte súbor
.ppk. - Voliteľne: v Connection › Data vyplňte Auto-login username
root. - Vráťte sa na Session, kliknite na názov relácie a na Save, aby ste to nabudúce nemuseli nastavovať.
- Kliknite na Open.
Kľúč z ssh-keygen môžete v PuTTY použiť tiež: v PuTTYgene kliknite na Load, vyberte súbor id_ed25519 (prepnite filter súborov na All Files) a uložte ho cez Save private key ako .ppk. Opačne prevediete kľúč z PuTTYgenu do formátu OpenSSH cez Conversions › Export OpenSSH key.
ssh-agent: heslo ku kľúču iba raz#
ssh-agent si odomknutý kľúč pamätá, takže heslo ku kľúču nezadávate pri každom pripojení.
Windows
V PowerShelli spustenom ako správca zapnite službu agenta (v predvolenom stave je vypnutá):
Get-Service ssh-agent | Set-Service -StartupType Automatic
Start-Service ssh-agentSet-Service -StartupType Automatic– agent sa bude spúšťať so systémom.Start-Service ssh-agent– spustí agenta hneď.
Potom v bežnom okne pridajte kľúč (opýta sa na heslo ku kľúču):
ssh-add $env:USERPROFILE\.ssh\id_ed25519macOS
ssh-add --apple-use-keychain ~/.ssh/id_ed25519--apple-use-keychain– uloží heslo ku kľúču do Kľúčenky macOS.
Aby SSH heslo z Kľúčenky použilo samo aj po reštarte Macu, pridajte na začiatok súboru ~/.ssh/config (pozri ďalšiu sekciu):
Host *
UseKeychain yes
AddKeysToAgent yesUseKeychain yes– heslo ku kľúču sa načíta z Kľúčenky (iba macOS).AddKeysToAgent yes– odomknutý kľúč sa pri prvom použití pridá do agenta.
Linux
Väčšina desktopových prostredí agenta spúšťa sama. Kľúč pridáte príkazom:
ssh-add ~/.ssh/id_ed25519Overenie: ssh-add -l vypíše odtlačky kľúčov, ktoré má agent načítané.
Súbor ~/.ssh/config: pripojenie jedným slovom#
Do súboru config v priečinku .ssh (Windows: C:\, bez prípony) si uložte nastavenie VPS:
Host mojevps
HostName 203.0.113.10
User root
Port 22
IdentityFile ~/.ssh/id_ed25519
IdentitiesOnly yes| Direktíva | Čo robí |
|---|---|
Host mojevps | Skratka, ktorú budete písať namiesto adresy. Platí pre riadky pod ňou. |
HostName | Skutočná IP adresa alebo doména VPS. |
User | Používateľ, za ktorého sa prihlasujete. |
Port | Port SSH. Zmeňte, ak ste SSH presunuli na iný port. |
IdentityFile | Súkromný kľúč pre tento VPS. |
IdentitiesOnly yes | Skúšať iba kľúč z IdentityFile, nie všetky kľúče z agenta. Predídete chybe Too many authentication failures. |
Potom sa pripojíte príkazom ssh mojevps. Skratku používajú aj scp a sftp.
Vypnutie prihlasovania heslom#
Kým je prihlasovanie heslom zapnuté, boty ho môžu ďalej skúšať. Po vypnutí VPS prijme iba kľúč.
Čo vypnutie hesla ovplyvní v zákazníckom účte
Záložky Súbory a Databázy sa k VPS prihlasujú heslom. Po vypnutí hesla prestanú fungovať. Súbory potom prenášajte SFTP klientom s kľúčom (WinSCP aj FileZilla kľúč ovládajú) a databázu spravujte cez SSH tunel. Konzola v prehliadači funguje ďalej. Prehľad všetkých dopadov je v návode Zabezpečenie nového VPS.
Najprv overte, že prihlásenie kľúčom funguje
Ak vypnete heslo a kľúč nefunguje, cez SSH sa neprihlásite. Než budete pokračovať, otvorte nové okno a prihláste sa kľúčom bez zadania root hesla. Pôvodné okno nechajte celý čas otvorené. Keby sa napriek tomu niečo pokazilo, prihláste sa cez konzolu v prehliadači root heslom a súbor z kroku 1 zmažte.
Vytvorte (alebo otvorte) vlastný konfiguračný súbor SSH servera:
bash nano /etc/ssh/sshd_config.d/00-zabezpeceni.confVložte nastavenie:
/etc/ ssh/ inisshd_config.d/ 00-zabezpeceni.conf PasswordAuthentication no KbdInteractiveAuthentication no PubkeyAuthentication yes PermitRootLogin prohibit-passwordAk už v súbore máte
PermitRootLogin no(z návodu Zabezpečenie nového VPS), posledný riadok vynechajte.Nastavenie Čo robí Odporúčaná hodnota Kedy zmeniť PasswordAuthenticationPovoľuje prihlásenie heslom. noNikdy, ak chcete mať heslo vypnuté. KbdInteractiveAuthenticationIný spôsob zadania hesla (interaktívna výzva). Aj s vypnutým PasswordAuthenticationby cez neho išlo heslo zadať.noyesiba pre dvojfázové overenie cez PAM (pokročilé).PubkeyAuthenticationPovoľuje prihlásenie kľúčom. Predvolená hodnota je yes, uvádzame ju pre istotu.yesNikdy. PermitRootLoginPrihlásenie roota. prohibit-password= root iba kľúčom.prohibit-passwordno, ak pracujete pod vlastným používateľom sosudo.Uložte a zatvorte editor.
Skontrolujte, že platia práve vaše hodnoty:
bash sshd -t && sshd -T | grep -Ei "^(passwordauthentication|kbdinteractiveauthentication|pubkeyauthentication|permitrootlogin)"sshd -t– kontrola syntaxe konfigurácie. Pri chybe vypíše súbor a riadok a ďalší príkaz sa nespustí.sshd -T– vypíše výslednú platnú konfiguráciu po načítaní všetkých súborov.grep -Ei "…"– vyberie iba štyri sledované nastavenia.
Výstup musí obsahovať tieto štyri riadky (poradie sa môže líšiť):
Výstuptext permitrootlogin without-password pubkeyauthentication yes passwordauthentication no kbdinteractiveauthentication nowithout-passwordje starší názov preprohibit-passworda znamená to isté. Ubuntu 24.04 aj Debian 13 vypisujú starší názov, novšie verzie OpenSSH vypíšuprohibit-password. Ak ste nastavilino, uvidítepermitrootlogin no.Keď niektorý riadok ukazuje inú hodnotu (typicky
passwordauthentication yes), rovnaké nastavenie je v súbore, ktorý sa načítava skôr. Nájdete ho príkazomgrep -rni "passwordauthentication" /etc/ssh/sshd_config.d/. Riadok v ňom zakomentujte znakom#na začiatku a kontrolu zopakujte.Reštartujte SSH server:
bash systemctl restart sshSúčasné spojenie zostane otvorené.
V novom okne skúste prihlásenie vynútiť heslom:
bash ssh -o PubkeyAuthentication=no [email protected]Server musí odpovedať
Permission denied (publickey).To je správne: heslo už neprijíma.V ďalšom okne sa prihláste normálne kľúčom (
ssh [email protected]). Až keď to funguje, zatvorte pôvodné okno.
Prečo súbor 00-zabezpeceni.conf
SSH server číta najprv súbory z priečinka /etc/ssh/sshd_config.d/ (podľa abecedy) a potom hlavný /etc/ssh/sshd_config. Pri každom nastavení platí prvá nájdená hodnota. Na VPS môže byť súbor ako 50-cloud-init.conf s PasswordAuthentication yes. Vďaka číslu 00 sa váš súbor načíta skôr a jeho hodnoty vyhrajú. Kontrola cez sshd -T vám to vždy potvrdí.
Viac počítačov, odobratie a záloha kľúča#
- Ďalší počítač: vytvorte na ňom vlastný kľúč s iným popisom a nahrajte ho rovnako. Každý kľúč je v
~/.ssh/authorized_keysna samostatnom riadku. Kopírovať jeden súkromný kľúč medzi počítačmi neodporúčame. - Odobratie kľúča (stratený notebook, odchod kolegu): otvorte
nano ~/.ssh/authorized_keysa zmažte riadok s jeho popisom. Platí okamžite. - Záloha: súkromný kľúč si uložte do správcu hesiel alebo na šifrované úložisko. Keď ho stratíte a heslo máte vypnuté, prihláste sa cez konzolu v prehliadači a nahrajte nový verejný kľúč.
- Iný používateľ než root: kľúč patrí do
/home/a súbor musí vlastniť tento používateľ.<UZIVATEL>/ .ssh/ authorized_ keys
Overenie#
ssh root@<IP_ADRESA_VPS>vás prihlási bez root hesla (nanajvýš sa opýta na heslo ku kľúču).ssh -o PubkeyAuthentication=no root@<IP_ADRESA_VPS>skončíPermission denied (publickey).sshd -Tukazujepasswordauthentication no.
Keď niečo nefunguje#
VPS sa stále pýta na root heslo#
Kľúč sa nepoužil. Spustite pripojenie s podrobným výpisom:
ssh -v [email protected]-v– podrobný výpis. Hľadajte riadkyOffering public key(klient kľúč ponúkol) aServer accepts key(server ho prijal).
Keď klient kľúč neponúka, je v inom súbore: použite -i alebo IdentityFile. Keď ho server neprijíma, skontrolujte 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áznamov SSH servera. HlásenieAuthentication refused: bad ownership or modesznamená nesprávne práva alebo vlastníka priečinka.ssh.
Skontrolujte tiež, že je kľúč v authorized_keys na jednom riadku a začína ssh-ed25519.
Permission denied (publickey).#
Heslo je vypnuté a kľúč server neprijal. Postupujte ako v predchádzajúcom bode. Ak sa neprihlásite vôbec, použite konzolu v prehliadači.
Windows: WARNING: UNPROTECTED PRIVATE KEY FILE! alebo Bad permissions#
K súkromnému kľúču majú prístup aj iní používatelia počítača (typicky po skopírovaní z iného miesta) a klient ho odmietne použiť. Nastavte práva v PowerShelli:
icacls $env:USERPROFILE\.ssh\id_ed25519 /inheritance:r
icacls $env:USERPROFILE\.ssh\id_ed25519 /grant:r "$($env:USERNAME):(R)"/inheritance:r– odoberie práva zdedené z priečinka./grant:r "<UZIVATEL>:(R)"– nastaví iba vášmu účtu právo čítať.
Na macOS a Linuxe rovnakú chybu opravíte príkazom chmod 600 ~/.ssh/id_ed25519.
Load key "…": invalid format#
Snažíte sa v OpenSSH použiť kľúč vo formáte PuTTY (.ppk). Preveďte ho v PuTTYgene cez Conversions › Export OpenSSH key.
PuTTY: Server refused our key#
Na VPS nie je správny verejný kľúč. Skopírujte znova text z poľa Public key for pasting into OpenSSH authorized_keys file (nie súbor zo Save public key) a vložte ho do ~/.ssh/authorized_keys na jeden riadok.
Too many authentication failures#
Agent ponúka príliš veľa kľúčov. Použite IdentitiesOnly yes v ~/.ssh/config, alebo prepínače -i ~/.ssh/id_ed25519 -o IdentitiesOnly=yes.
Zhrnutie
- Súkromný kľúč zostáva iba vo vašom počítači, verejný kľúč patrí do
~/.ssh/authorized_keysna VPS. - Kľúč vytvoríte príkazom
ssh-keygen -t ed25519 -C "popisek"alebo v PuTTYgene (EdDSA, Ed25519). - Nahranie:
ssh-copy-id(macOS, Linux), vo Windowstype … | ssh …, alebo ručne. - Heslo vypnete súborom
/etc/a výsledok overíte príkazomssh/ sshd_ config. d/ 00-zabezpeceni. conf sshd -T. - Pred zatvorením pôvodného okna vždy otestujte prihlásenie kľúčom v novom okne.
- Vypnuté heslo vypne aj záložky Súbory a Databázy; konzola funguje ďalej.