Už delší dobu používám místo klasického jména a hesla k přihlašování na server SSH klíč. Abych se vyhnul odhadnutí snadného hesla přes bruteforce útok, používal jsem opravdu silné heslo. Navíc heslo bylo dobré čas od času měnit a když jste se dlouho někde nepřihlašovali, tak jste pak prostě hádali, které heslo by to tak mohlo být.
Hesla obecně jsou pak náchylná na to, že je někdo odposlechne, stáhne jejich databázi, nebo hashe, zkrátka používat jen heslo dnes nestačí.
Přešel jsem tedy na ověřování pomocí SSH klíče.
Jak to funguje
Funguje to tak, že server vygeneruje náhodná data, která vám pošle. Vy je svým privátním klíčem podepíšete a pošlete mu je zpátky. Na serveru máte uložen veřejný klíč, kterým on ověří pravost vašeho podpisu a pustí vás dovnitř.
Největší výhodou pak je, že vlastně nedochází k odeslání privátního klíče na server – vše probíhá na vaší bezpečné stanici a kdyby byl server kompromitovaný či nedůvěryhodný, je vám to jedno.
Veřejný klíč tedy můžete nahrát na libovolný počet serverů a všude se přihlašovat svým jediným unikátním privátním klíčem.
Není třeba chránit jen SSH, ale i další služby. Jak a proč zabezpečit RDP je popsáno zde: https://www.spajk.cz/jak-hacknout-server-pres-rdp-a-jak-tomu-zabranit/
Jak na to
Nejprve si vygenerujeme pár klíčů. Ty pak zkopírujeme do domovského adresáře na serveru.

🤖 Tenhle web je bez reklam! 🤖 💸 Nesbírám a neprodávám data návštěvníků. 💸 🕵️♂️ Respektuji Vaše soukromí. 🕵️♂️ 🌎 Píšu pro dobro lidstva. 🌎 ❤️ Líbí se Vám článek? ❤️
ssh-keygen -t rsa #Generating public/private rsa key pair. #Enter file in which to save the key (/home/spajk/.ssh/id_rsa):
Program se zeptá kam klíče uložit, stačí zmáčknout ENTER pro uložení do výchozího umístění.
Pro vyšší bezpečnost nedoporučuji používat pro přihlašování váš hlavní/admin účet (v mém případě spajk), ale vytvořit si pro přihlášení jedinečnou identitu.
Nyní je potřeba zadat frázi, neboli heslo k certifikátu, kterým bude certifikát zašifrován. Lze jej sice nechat bez hesla, ale to nedoporučuji. Pokud by se k certifikátu někdo dostal, mohl by jej zneužít. A to nechcete.
Klíče jsou tedy vygenerovány a uložily se do vašeho domovského adresáře do složky .ssh
.
Klíče jsou dva id_rsa
a id_rsa.pub
. Přípona *.pub
znamená public, neboli veřejný – toto je tedy část, kterou nahrajete na server. Oproti tomu klíč id_rsa
je teď něco jako klíč od vašeho bytu – bezpečně jej uložte na místo, kde se k němu nikdo nedostane.
Osobně doporučuji změnit jeho název a přidat mu příponu
*. private
, aby bylo jasné, o jak důležitý soubor se jedná.
Tím je klientská část hotová.
Nahráváme klíč na server
Veřejný klíč je nyní potřeba nahrát na servery, kam se chceme přihlašovat a to konkrétně do složky /home/spajk/.ssh/authorized_keys
. K tomu slouží třeba příkaz:
ssh-copy-id username@remote_host
Tento nástroj je k dispozici na většině systémů, pokud ho tam nemáte, nebo jste spíš na grafiku, použijte třeba WinSCP.
Manuální přidání klíče
Pokud nakopírujete na server veřejný klíč manuálně, tak je potřeba přidat ho do ověřených klíčů, aby fungoval. Pro zobrazení obsahu klíče zadejte:
cat ~/.ssh/id_rsa.pub
Výsledkem by měl výstup v tomto tvaru:
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAACAQCqql6MzstZYh1TmWWv11q5O3pISj2ZFl9HgH1JLknLLx44+tXfJ7mI
rKNxOOwxIxvcBF8PXSYvobFYEZjGIVCEAjrUzLiIxbyCoxVyle7Q+bqgZ8SeeM8wzytsY+dVGcBxF6N4JS+z
Vk5eMcV385gG3Y6ON3EG112n6d+SMXY0OEBIcO6x+PnUSGHrSgpBgX7Ks1r7xqFa7heJLLt2wWwkARptX7ud
Sq05paBhcpB0pHtA1Rfz3K2B+ZVIpSDfki9UVKzT8JUmwW6NNzSgxUfQHGwnW7kj4jp4AT0VZk3ADw497M2G
/12N0PPB5CnhHf7ovgy6nL1ikrygTKRFmNZISvAcywB9GVqNAVE+ZHDSCuURNsAInVzgYo9xgJDW8wUw2o8U
77+xiFxgI5QSZX3Iq7YLMgeksaO4rBJEa54k8m5wEiEE1nUhLuJ0X/vh2xPff6SQ1BL/zkOhvJCACK6Vb15m
DOeCSq54Cr7kvS46itMosi/uS66+PujOO+xt/2FWYepz6ZlN70bRly57Q06J+ZJoc9FfBCbCyYH7U/ASsmY0
95ywPsBo1XQ9PqhnN1/YOorJ068foQDNVpm146mUpILVxmq41Cj55YKHEazXGsdBIbXWhcrRf4G2fJLRcGUr
9q8/lERo9oxRm5JFX6TCmj6kmiFqv+Ow9gI0x8GvaQ== demo@test
Na serveru zkontrolujte, zda existuje složka ~/.ssh
a pokud ne, tak ji vytvořte:
mkdir -p ~/.ssh
Přejděte do ní a vložte výpis vašeho klíče do souboru authorized_keys:
echo výpis_veřejného_klíče >> ~/.ssh/authorized_keys
V příkazu výše nahraďte výpis_veřejného_klíče tím co vzešlo z příkazu cat ~/.ssh/id_rsa.pub
Vypadat by to mělo nějak takto: ssh-rsa AAAA...
.
Nastavte oprávnění:
chmod -R go= ~/.ssh
To pro jistotu rekurzivně odebere ke složce všechny případná oprávnění grup a dalších.
Úprava konfigurace služby
Jakmile je veřejný tam klíč na serveru nahrán, doporučuji přesunout id_rsa
do bezpečného umístění.
Pokud chcete zapnout/vynutit používání SSH klíčů na serveru, je potřeba upravit konfiguraci.
nano /etc/ssh/sshd_config
Zde pak hledejte volby:
RSAAuthentication yes PubkeyAuthentication yes
Pokud byste chtěli přihlašování přes SSH klíče vyloženě vynutit, (doporučuji) pak přidejte ještě tyto řádky a ještě zakažte přihlašování roota přes SSH:
ChallengeResponseAuthentication no PasswordAuthentication no UsePAM no PermitRootLogin no
Tímto způsobem se vyhnete nejen bruteforce útokům, ale i naučíte další uživatele více dbát na bezpečnost. Jakmile je hotovo, jen restartujeme službu SSH serveru:
systemctl restart sshd
A tím je hotovo. Nyní se můžete bezpečně přihlašovat na vše linuxové servery.
PS: Někomu možná přijde nepohodlné používat dva faktory – klíč a heslo (passphrase). Možná Vás potěší, že klíč i frázi umí uložit klienti jako Putty či Termius do své keše a vše pak probíhá na jedno kliknutí. V případě použití aplikace Termius je vše chráněno pomocí biometriky na vašem tabletu/telefonu, což se dá pokládat za slušnou multifaktorovou autentizaci.

🤖 Tenhle web je bez reklam! 🤖 💸 Nesbírám a neprodávám data návštěvníků. 💸 🕵️♂️ Respektuji Vaše soukromí. 🕵️♂️ 🌎 Píšu pro dobro lidstva. 🌎 ❤️ Líbí se Vám článek? ❤️