První spuštění serveru 2: Používej klíče místo hesel

Úvod
Co to znamená používat klíče místo hesel pro SSH?
SSH (Secure SHell) je protokol, který umožňuje bezpečnou komunikaci mezi dvěma systémy. Když se snažím připojit k serveru přes SSH, musím prokázat svou totožnost. Tradiční způsob, jak to udělat, je zadáním hesla.
Avšak hesla mohou být uhodnuta, ukradena nebo vystavena různým útokům. Klíčová autentizace je alternativní metoda, která je mnohem bezpečnější. Místo toho, abych zadával heslo, použijiji soukromý a veřejný klíč k ověření své identity.
Jak to funguje?
-
Generování klíčového páru: Nejprve vytvořím klíčový pár, který se skládá z veřejného klíče a soukromého klíče.
- Veřejný klíč mohu bezpečně sdílet s kýmkoli (v tomto případě se uloží na server, ke kterému se chci připojit).
- Soukromý klíč by měl být dobře chráněn a nikdy nesdílen.
-
Přenos veřejného klíče na server: Jakmile mám klíčový pár, přenesu svůj veřejný klíč na server do souboru nazývaného
~/.ssh/authorized_keys
. Tímto krokem říkám serveru: Pokud se někdo pokusí připojit s odpovídajícím soukromým klíčem, povolte mu přístup. -
Připojení k serveru: Když se pokusím připojit k serveru, SSH klient na mém počítači použije soukromý klíč k ověření své identity. Pokud klíč odpovídá veřejnému klíči uloženému na serveru, budu připojen.
Postup
Vytvoření klíčového páru v lokálním PC
-
Vygenerování Páru Klíčů (Veřejný a Soukromý Klíč)
Na mém lokálním počítači vygeneruji pár SSH klíčů (veřejný a soukromý klíč). To mohu udělat pomocí příkazu:
ssh-keygen -t ed25519
Během generování budu moci nastavit heslo (frázi) pro soukromý klíč pro další zabezpečení.
-
Kopírování Veřejného Klíče na Server
Kopírování veřejného klíče na server. To mohu udělat pomocí příkazu:
ssh-copy-id UzivatelskeJmeno@IpAdresaServeru
Tento příkaz vloží můj veřejný klíč do souboru
~/.ssh/authorized_keys
na serveru.
Soubor~/.ssh/authorized_keys
je seznam veřejných klíčů, které jsou povoleny pro autentizaci přes SSH.
Když se snažím připojit k serveru pomocí klíčové autentizace, server zkontroluje tento soubor a porovná jej se soukromým klíčem. Pokud se shoduje, budu autentizován.
Konfigurace ssh
Pro úspěšné použití autorizace pomocí rsa klíče je nutné upravit pravidla v konfiguraci ssh.
Upozornění
Neprováděj tento krok, pokud nebylo úspěšně splněno kopírování veřejného klíče na server!
Ověření úspěšnost zkopírovaného ssh-id
V následujících krocích
-
Zkontroluji veřejný klíč (nadále pubkey) svého lokálního pc
cat ~/.ssh/id_ed25519.pub
-
Přihlásím se pomocí ssh na server a nechám si vypsat
authorized_keys
.cat ~/.ssh/authorized_keys
Pokud je ssh-id úspěšně nakopírováno, jeden z řádků
authorized_keys
bude obsahovat ssh-id mého lokálního PC.
V případě neúspěšného kopírovaní ssh-id
Pokud z nějakého důvodu ssh-id není nakopírováno, lze upravit soubor authorized_keys
tak, že na nový řádek vložím veřejný klíč svého lokálního PC.
Např. pomocí
nano ~/.ssh/authorized_keys
Konfigurace ssh autorizace
Na serveru otevřu v editoru config soubor:
sudo nano /etc/ssh/sshd_config
- Odkomentuji
PubkeyAuthentication yes
pro spuštění autentifikace pomocí pubkey. - Upravím
PasswordAuthentication no
pro zrušení autorizace pomocí hesla.
Doplňková ssh nastavení
- Nastavení
UsePAM yes
může obcházet některá nastavení SSH, včetněPasswordAuthentication
. Přepíšeme tedy řádek naUsePAM no
. PermitRootLogin prohibit-password
umožňuje root uživateli přihlášení pouze pomocí klíčové autentizace. Je to dobrá praxe, ale pokud chcete být ještě bezpečnější, můžete nastavitPermitRootLogin no
, což zcela zakáže přihlašování root uživatele přes SSH.- Pokud nepotřebuji X11 forwarding, doporučuje se pro zvýšení bezpečnosti zakázat změněním řádku
X11Forwarding yes
naX11Forwarding no
.
Spuštění změn
Pokud celý postup proběhl v pořádku, restartuji ssh pro zapsání změn:
sudo systemctl restart ssh
Před tímto příkazem je vhodné prověřit, že byly všechny body postupu úspěšně splněny. V opačném případě hrozí, že se na server již nedostanu a budu muset provést novou instalaci serveru.
Nyní se lze na server přihlásit je z autorizovaného PC pomocí veřejného klíče, bez nutnosti zadávat heslo.