Vygenerování ed25519 SSH klíčů
Na počítači (Widnows / Mac / Linux), na kterém nejste k serveru skrze SSH připojeni (pokud jste, odhlaste se), v příkazovém řádku nebo terminálu, zadejte příkaz:
ssh-keygen -t ed25519 -C "your_email_address@example.com, PC name"
- parametr
-t
definuje typ klíče ed25519 - dobrovolný parametr
-C
přidává poznámku, k jakému uživateli a počítači je klíč vázán.
Potvrďte / určete novou cestu a název souboru (aby jste je snadno rozpoznali), kde mají být klíče uloženy a v dalším kroku vymyslete, zadejte a opětovným zadáním potvrďte bezpečnostní frázi, která se stane samotný heslem privátního SSH klíče. Buďte si dále vědomi, že zadabou bezpečnostní frázi v případě zapomenutí nelze obnovit.
Do zadané složky v kroku výše se vygenerovaly 2 SSH klíče.
- parametr
Zjištění veřejného klíče
Veřejný SSH klíč je soubor s koncovkou ".pub". Obsah veřejného klíče zjistíme jeho otevřením skrze Příkazový řádek / Terminál.
Na Windowstype %USERPROFILE%\.ssh\nazev_souboru.pub
Na Mac / Linuxcat ~/.ssh/nazev_souboru.pub
Veřejný klíč začíná typem "ssh-ed25519 AAAAC..."
-
Vzdáleně se přihlásíme k serveru pomocí uživatelského jména a hesla
- Připojíme počítač (z kterého se vzdáleně připojujeme) a server, k němuž se připojujeme, do stejné lokální sítě (totožného routeru)
- Připojíme se vzdáleně k serveru
Na Windows
- Spustíme Putty klienta nainstalovaného v počítači, přejdeme na záložku "Sessions".
- Zadáme pole "Host" značící IP adresu serveru (zjistíme v routeru) a port, skrze nějž se k serveru připojujeme (výchozí je
22
- v dalších krocích jej zakážeme, nyní jej však použijte). - V otevřeném okně příkazového řádku zadejte uživatelské jméno a heslo pro připojení k serveru (bylo definováno při instalaci serveru)
Na Mac / Linux- Spustíme terminál
- V terminálu zadáme ssh příkaz s odkazem na konkrétního uživatele, IP serveru a port:
ssh username@server_ip -p 22
Poznámka:
ssh
příkaz pracuje s defaultním přihlašováním pomocí klíčů. Nemáme-li jej specifikován v rámcissh
příkazu, počítač zkusí všechny. Máme-li v počítači, z něhož se přihlašujeme vyšši početknown host
serverů, můžeme překročit maximální počet pokusů a dostat od serveru zamítnutí přístupu s oznámením "Too many authentication failures", jelikož žádný s použitých klíčů nebyl pro náš server validní. Oprava je snadná, v rámcissh
příkazu se jasně specifikuje metoda autentizace, v tomto případě heslo.ssh -o IdentitiesOnly=yes -o PreferredAuthentications=password username@server_ip -p 22
- Zadáme heslo pro připojení k serveru (bylo definováno při instalaci serveru)
Nahrání veřejného klíče na server
- Na serveru vytvoříme příkazem
mkdir -p ~/.ssh
složku pro uložení veřejných SSH klíčů. - Příkazem
nano ~/.ssh/authorized_keys
otevřeme soubor authorized_keys a vložíme do něj veřejný klíč zjištěný v kroku 1. (vkládáme celý řádek, začínající ssh-ed25519 ...) - Soubor "authorized_keys" stisknutím kláves ctrl+x uložíme a zavřeme.
- příkazem
exit
připojení k serveru ukončíme
- Na serveru vytvoříme příkazem
Vzdálené přihlášení k serveru pomocí privátního SSH klíče
Na WindowsPoužíváme-li OS Windows a Putty klienta, námi vygenerovaný formát privátního klíče v kroku 1 (soubor bez koncovky) není ve formátu podporovaném Putty klientem. Je tedy nezbytné si jej převést, a to následujícím způsobem:
- Příkazem
type %USERPROFILE%\.ssh\nazev_souboru
si zobrazíme privátní klíč a celý tak, jak je, včetně "-----BEGIN OPENSSH PRIVATE KEY-----" a "-----END OPENSSH PRIVATE KEY-----" zkopírujeme do .txt souboru, který si uložíme. - Stáhneme program "puttygen.exe (a RSA and DSA key generation utility)" z oficiálního Putty webu.
- Otevřeme stažený program "PuTTY Key Generator", dole vybereme typ "EdDSA" → (Ed25519). V horní liště zvolíme možnost "File → Load private key". Přepneme na zobrazení "All FIles (*.*)" a vybereme .txt soubor, do nějž jsme privátní klíč v předchozím kroku uložili. Zadáme passphrase, kterou jsem definovali při tvorbě klíče. Jestliže vše prošlo, dostaneme upozornění "Successfully imported foreign key...".
- Stiskneme tlačítko "Save private key" a privátní SSH klíč v Putty podporovaném .ppk formátu uložíme opěd do složky .ssh. Je-li něco nejasné, postup se screenshoty naleznete zde.
- Otevřeme Putty klient, přejdeme do sekce "Connections → SSH → Auth → Credentials" a v poli "Private key file for authentization" zvolíme "Browse" a vybereme .ppk soubor uložený v předchozím kroce.
- Přejdeme do sekce "Session", zadáme pole "Host" a "Port", a po stisknutí tlačítka "Open", v nově otevřeném příkazovém okně zadáme uživatelské jméno (login as:), načež namísto požadavku na heslo bychom měli vidět identifikaci veřejného klíče, v rámci něhož se připojujeme s požadavkem na vložení passphrase.
- Zadáme passhprase a přihlásíme se.
Na Mac / Linuxssh username@server_ip -p 22 -i ~/.ssh/private_key
- Příkazem
SSHD konfigurace
Možnosti přihlášení skrze SSH na úrovni celého systému i jednotlivých uživatelů lze nastavovat v konfiguračním souboru /etc/ssh/sshd_config
. Ten lze otevřít následujícím příkazem:
sudo nano /etc/ssh/sshd_config
Jelikož soubor je otevírán prostřednictví sudo
i se změnovými právy, pro jeho otevření může být vyžadováno uživatelské heslo (uživatelské heslo, s kterým jste se k serveru přihlašovali).
Do souboru /etc/ssh/sshd_config
se zanáší definice dle potřeb SSH přihlašování, viz níže. Ačkoli samotnou změnou nedojde k automatickému odhlášení, přesto, z bezpečnostních důvodů je vhodné být k serveru připojen ve 2 instancích (2 oknech), aby jste v případě testovacího odhlášení se v jednom a nemožnosti se opětovného přihlášení měli stále možnost navrácení provedených změn z druhého okna.
- Jestliže nemáte otevřen soubor
/etc/ssh/sshd_config
, otevřete jej příkazemsudo nano /etc/ssh/sshd_config
- Najdeme záznam
#AuthorizedKeysFile
a odkomentujeme jej odstraněním#
z jeho začátku - Najděte záznam
KbdInteractiveAuthentication
a nastavte jej na hodnotuno
. Současně se ujistěte, že není zakomentován (nezačíná #) - Najděte záznam
PasswordAuthentication yes
a změňte jej na hodnotuno
. Ujistěte se, že není zakomentován (nezačíná #) - Ujistěte se, že záznam
PermitRootLogin
má hodnotuprohibit-password
(PermitRootLogin prohibit-password
) - Soubor ukončete příkazem ctrl+x a při ukončování uložte.
Zadejte příkaz
sudo sshd -T | grep -i passwordauthentication
a ověřte, že jeho výpisem je záznam "passwordauthentication no".V tomto nastavení je možné k serveru přistupovat jak pomocí kombinace username + private key, tak i klasicky username + password. Chceme-li, aby byla možná varianta jen s použitím privatekey, na konci souboru
/etc/ssh/sshd_config
je nutné definovatAuthenticationMethods publickey
.- Restartujte SSH server
- Na Ubuntu 24.04
sudo systemctl restart ssh
- Na Ubuntu 22.04
sudo systemctl restart sshd sudo systemctl restart ssh
- Na Ubuntu 24.04
- Odhlaste se příkazem
logout
. - Při opětovném přihlášení bez public key by jste měli dostat po zadání uživatelského jména chybovou hlášku "No supported authentization methods available (server sent: publickey)". Při použití privatekey by přihlášení mělo být úspěšné.
- Poznámka: Přihlášení pomocí uživatelského jména a hesla je stále možné lokálně - pomocí klávesnice připojené k serveru
- Jestliže nemáte otevřen soubor
/etc/ssh/sshd_config
, otevřete jej příkazemsudo nano /etc/ssh/sshd_config
- Na konec souboru vložte následující definici:
Match User <specificUserName> ChallengeResponseAuthentication yes AuthenticationMethods keyboard-interactive
Tento předpis přepisuje pro uživatele
<specificUserName>
následující globální nastavení:PasswordAuthentication no
nayes
AuthenticationMethods
nakeyboard-interactive
(password
+ Google 2FA)
- Soubor ukončete příkazem ctrl+x a při ukončování uložte.
- Restartujte SSH server
- Na Ubuntu 24.04
sudo systemctl restart ssh
- Na Ubuntu 22.04
sudo systemctl restart sshd sudo systemctl restart ssh
- Na Ubuntu 24.04
Kontrola autentizačního logu
Čelíte-li problémům s přihlášením libovolného uživatele skrze SSH
, zkontrolujte autentizační log.
sudo tail -f /var/log/auth.log