SSH

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.

SSH1

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.

SSH2

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.

SSH3

Pokud má klíč nebo authorized_keys příliš volné oprávnění, SSH nenechá proces dokončit.

SSH4

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íčů.

PuTTYgen1

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.

PuTTYgen2

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.

PuTTYgen4

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.

PuTTYgen3

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.

PuTTYgen5

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.

PuTTYgen6

Pokud bychom to samé chtěli udělat ve WinSCP, je to jednoduché. V připojovacím okně zadáme server a login.

PuTTYgen7

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.

PuTTYgen8

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.

PuTTYgen9