Linux: přihlášení přes SSH bez zadávání hesla

Běžně se přihlašuji ke vzdálené konsoli pomocí protokolu SSH s nutností zadávání hesla. Pro ulehčení (člověk je tvor líný) přístupu je možné využít princip ověření přes soukromý a veřejný klíč. Přihlašování pak funguje tak, že server vygeneruje náhodná data, která mi pošle. Já je svým privátním klíčem podepíši a pošlu zpět. Server pomocí veřejného klíče, který jsem mu již dříve dodal, ověří pravost podpisu a pustí nás dovnitř.

Vygenerování vlastního páru klíčů

$ ssh-keygen -t rsa -v
Generating public/private rsa key pair.
Enter file in which to save the key (/home/gp/.ssh/id_rsa): 
Enter passphrase (empty for no passphrase): 
Enter same passphrase again: 
Your identification has been saved in /home/gp/.ssh/id_rsa.
Your public key has been saved in /home/gp/.ssh/id_rsa.pub.
The key fingerprint is:
ac:e5:5f:c8:a3:13:84:90:4c:00:34:23:46:08:57:47 gp@xub
The key's randomart image is:
+--[ RSA 2048]----+
|            .+=OE|
|              =O+|
|              ..o|
|       .  ....   |
|        S .   .  |
|        . . + +  |
|            . .  |
|           . o . |
|            .    |
+-----------------+

Aby nebylo možné klíče jednoduše z počítače zkopírovat a zneužít, mohou být chráněny šifrováním. Pokud tedy někdo soubor získá, bude mu k ničemu. Přestože je možné nechat privátní klíč nezašifrovaný, není to doporučováno.

Tímto se nám vygenerovaly do složky s názvem .ssh dva soubory s názvy id_rsa a id_rsa.pub (soukromý a veřejný[public]). Veřejný klíč je soubor, který jako jediný může opustit náš počítač, a to pomocí utility ssh-copy-id.

Nahrání veřejného klíče na vzdálený počítač

Nyní je třeba nakopírovat veřejný klíč na vzdálený počítač pomocí následující příkazu:

$ ssh-copy-id remote_machine
The authenticity of host 'remote_machine (172.0.16.40)' can't be established.
ECDSA key fingerprint is 5e:bf:df:c2:34:d8:a7:d9:a9:a8:b7:31:35:a2:7c:d1.
Are you sure you want to continue connecting (yes/no)? yes
/usr/bin/ssh-copy-id: INFO: attempting to log in with the new key(s), to filter out any that are already installed
/usr/bin/ssh-copy-id: INFO: 1 key(s) remain to be installed -- if you are prompted now it is to install the new keys
gp@remote_machine's password:

Number of key(s) added: 1

Now try logging into the machine, with: "ssh 'remote_machine'"
and check to make sure that only the key(s) you wanted were added.

Na vzdáleném počítači se vytvoří soubor ~/.ssh/authorized_keys s mým veřejným klíčem.

Nyní se vraťme ještě k oné Passphrase. Pokud při vytváření páru klíčů nastavíme heslo, je toto heslo vyžadováno vždy při přístupu k soukromému klíči, což nás jistě nepotěší. Tento problém se dá vyřešit pomoc aplikace ssh-agent. Tento program dokáže zjistit od uživatele heslo k dešifrování privátního klíče, načíst jej do paměti, dešifrovat a na požádání jej vydávat lokálnímu SSH klientovi. Jelikož klíč zůstává bezpečně v paměti a nikdy se v nedešifrované podobě nedostane zpět na disk, je toto řešení bezpečné a především pohodlné – program se zeptá jen jednou a pak už nás neobtěžuje. Dokud se neodhlásíme nebo agenta nedonutíme heslo zapomenout, máme od něj pokoj.

Nejprve je třeba agenta zavést do paměti, aby později očekával vaše příkazy. Existuje několik možností, jak to udělat. Pokud váš systém startuje do textového režimu, můžete příkaz vložit do ~/.bashrc. V případě že startuje rovnou do X serveru, je možné jej zapsat do ~/.xsession nebo vložit mezi spouštěné programy ve správci oken. Některé distribuce už rovnou SSH agenta zavádějí samy, takže není třeba se o jeho start starat.

Klíče pak do paměti přidáme pomocí příkazu ssh-add. Ten automaticky vyhledá v našem domovském adresáři privátní klíče, zeptá se na heslo k nim a načte je do paměti. Od této chvíle je možno připojovat se k serverům bez nutnosti zadávání hesla. Pokud budeme chtít dešifrované klíče z paměti vyhodit, stačí spustit příkaz ssh-add s parametrem -D.

Comments are closed.