SSH klíče v Debianu a PuTTYgenu
06.08.2021 | Tag Linux
Zabezpečení SSH přístupu pomocí klíčů je ve finále strašně jednoduché. V článku chci ukázat, jak klíč vygenerovat v Linuxu a použít ho s PuTTY a naopak, jak klíč vygenerovat v PuTTY a dostat ho do Linuxu.
O SSH klíčích a samotném principu asymetrické kryptografie se dá povídat opravdu dlouho. Na internetu je spousta zajímavého materiálu a já sama si v jiném článku k SSH taky odplivnu, ale ne teď. Teď pojďme rovnou ke generování klíčů přímo v Linux systému a poté přes PuTTYgen.
V Linuxu použijeme ssh-keygen, což je součást standardních SSH utilit. Pokud tedy je na serveru OpenSSH, bude tam i ssh-keygen. Utilita má mnoho parametrů, pro úplně základní použití se hodí parametry -t, -b a -C. Parametr -t definuje zvolený algoritmus, -b definuje délku klíče a pomocí -C je možné nastavit komentář (není povinný, ale hodí se). V defaultu bez jakýchkoliv parametrů se generuje RSA klíč o délce 2048 bitů. Pokud bychom chtěli RSA klíč o délce 4096, použijeme -b parametr. Celý příkaz by byl ssh-keygen -b 4096 -C lab-4096. Opět, -C je volitelný parametr pro komentář, není potřeba.
ssh-keygen -b 4096 -C lab-4096
Pro ukázku ještě alternativa s použitím eliptických křivek. Zde se -b parametr nepoužívá, délka je pevně daná.
ssh-keygen -t ed25519 -C lab-ed25519
Příkaz se během generování zeptá na cestu pro uložení klíčů, přičemž v defaultu zvolí domovský adresář uživatele, pod kterým se klíč generuje, a složku .ssh, což je standardní úložiště klíčů. Následně se zeptá na frázi, kterou je možné zadat, ale není to povinné, a pak už proběhne vygenerování páru. Fráze by měla klíč chránit. Pokud by si privátní část například někdo odkopíroval k sobě, bez znalosti fráze by klíč stejně nemohl jen tak použít.
Pokud se podíváme do /.ssh/ (případně jiné zvolené cesty), najdeme tam dva soubory. Soubor s příponou .pub je veřejná část klíče. Obsah .pub se nakopíruje do souboru authorized_keys na vzdáleném serveru, kde chceme klíč využít. Způsobů přenosu věřejné části je několik, ale já tupě využívám copy/paste z .pub souboru do authorized_keys a zatím mě to nezklamalo. Soubor bez přípony je privátní část, která se bude používat k přihlášení, a kterou je třeba si hlídat. U mě je vidět jeden pár pro RSA a jeden pár pro ed25519. Není problém vzít veřejnou část obou klíčů a dát ji na vzdálený server, klíčů může být libovolné množství. Je to i lepší, protože máme nějakou zálohu, kdyby se s jedním z klíčů něco stalo.
Co si SSH hlídá, je vlastnictví a oprávnění nad těmito soubory a samotnou .ssh složkou. Stejně tak u vzdáleného serveru to platí pro authorized_keys. Aby se privátní klíč dal použít, musí být vlastníkem souboru uživatel a jen tento uživatel má k souboru práva. To samé platí pro .ssh. Níže je vidět správná podoba oprávnění pro klíče a authorized_keys (jde o testovací mašinu, takže se mi soubory sešly pohromadě). Klíče jsou pouze pro čtení a authorized_keys pro čtení a zápis. Obojí platí pouze pro vlastníka, což je zde lab.
Pokud má klíč nebo authorized_keys příliš volné oprávnění, SSH nenechá proces dokončit.
To by bylo k této části vše. Zmiňuji to i u PuTTYgen části níže, ale na straně serveru není pro fungování klíčů v základu nic potřeba měnit. OpenSSH vezme klíč i heslo, pokud to nenastavíme jinak. Konfigurace SSH serveru se řídí v /etc/ssh/sshd_config. Tak, a dál PuTTYgen.
PuTTYgen je běžně součástí instalačního balíčku utilit PuTTY, pokud tedy vyloženě neinstalujete jednotlivé programy (což je samozřejmě také možné). Kompletní balík či jednotlivé utility jsou k dispozici na stránkách chiark.
Použití PuTTYgenu je dost přímočaré, po spuštění programu můžeme rovnou vygenerovat pár klíčů. Ve spodní části okna se volí algoritmus, který pro klíče chceme použít. Zde záleží na preferencích každého admina. Já používám Ed25519, což je v PuTTYgen ukryto pod EdDSA. Alternativně pak klasické RSA s délkou klíče aspoň 4096. Po navolení kýžených parametrů dáme Generate. PuTTYgen bude při generování chtít zakroužit s myší pro vygenerování náhody a dá nám pár klíčů.
V této části můžeme klíči nastavit komentář nebo popis a ochrannou frázi, pokud chceme. Ani jedno není povinné. V ukázce mám vyplněný komentář i frázi. Komentář se promítne do výše vypsané veřejné části klíče. Jak sám PuTTYgen píše, tuto frázi si zkopírujeme a následně vložíme do authorized_keys na serveru, kam se klíčem chceme hlásit.
Pro ukázku je níže výpis authorized_keys s nově vygenerovanou veřejnou částí klíče. Jde o server, kam se chci přihlašovat účtem lab pomocí klíče. V konfiguraci OpenSSH (pokud klíč máme pro přihlášení na standardní Linux server) myslím v základu není potřeba nic měnit. Server v defaultu umožňuje login jak pomocí hesla, tak i klíče, který bude očekávat v .ssh/authorized_keys domovského adresáře uživatelského účtu. Chování serveru se dá dle potřeby změnit v /etc/ssh/sshd_config.
Privátní klíč můžeme uložit buď ve formátu pro PuTTY, nebo pomocí konverze v OpenSSH formátu. Pro uložení v PuTTY formátu stačí kliknout na Save private key. Uložený soubor pak použijeme pro přihlášení v PuTTY nebo WinSCP.
Pokud chceme privátní klíč uložit v OpenSSH formátu, třeba pro použití na Linuxové mašině, jednoduše nahoře v kartě Conversions dáme Export OpenSSH key.
Teď už stačí klíč vyzkoušet. V PuTTY zadáme adresu serveru, kde je veřejná část klíče a kam se chceme přihlásit, a v levém menu se přes Connection – SSH – Auth proklikáme k výběru privátního klíče, který jsme si předtím uložili.
Po otevření relace bude server chtít login, pokud jsme ho neuvedli při zadávání serveru, a frázi klíče, pokud jsme ji nastavili. Pak bychom se měli ověřit.
Pokud bychom to samé chtěli udělat ve WinSCP, je to jednoduché. V připojovacím okně zadáme server a login.
Následně klikneme na Advanced a pod SSH – Authentication vybereme stejný privátní klíč, který jsme dříve vygenerovali. WinSCP je založené na PuTTY, proto bere klíče v tomto formátu.
Pokud je klíč chráněný frází, WinSCP nás vyzve k zadání. Následně bychom se měli připojit k serveru.