Linux: ssh klíče



1. Způsoby autentizace

Pro autentizaci uživatele vzdálenému systému se běžně používá kombinace dvou údajů: jména a hesla. Pokud heslo, které uživatel pošle spolu s uživatelským jménem, je heslo, které má server u daného uživatele uložené v databázi hesel, uživatel je autentizován. Tuto metodu autentizace lze v dnešní době označit za zastaralou a nepříliš bezpečnou.

Používání SSH klíčů je bezpečný způsob autentizace ke vzdálenému serveru. Každý uživatel má k dispozici dva klíče: veřejný (public) a soukromý (private).

2. SSH klíč

SSH klíč je číslo o délce několika kilobitů. Jedná se o kryptografický prostředek, který se skládá ze dvou částí:

  1. Veřejný klíč je veřejně publikovatelným prostředkem. Tímto klíčem je možné zašifrovat zprávu, nelze ji ale v rozumném čase rozšifrovat. Z veřejného klíče nelze vypočítat klíč privátní.
  2. Privátní klíč je určen výhradně majiteli a měl by být bezpečně skladován. Tímto klíčem je jeho majitel schopen rozšifrovat zprávu, zašifrovanou veřejným klíčem. Z privátního klíče je vypočítán klíč veřejný. Soukromý klíč nikdy nikomu nedávejte. Je to totéž, jako byste někomu prozradili své heslo.

Shrnuto:

  1. Veřejný klíč nahrajeme na vzdálený server,
  2. soukromý si necháme u sebe na lokálním počítači.

3. Jak autentizace funguje

Server musí mít k dispozici veřejný klíč osoby, která má právo být systémem autentizována. Pomocí tohoto klíče zašifruje výzvu (blok náhodných dat) pro klienta, který pomocí privátního klíče prokáže, je-li schopen tuto výzvu dešifrovat.

Pokud server obdrží od klienta správně dešifrovanou výzvu, ověří tím, že klient má k dispozici příslušný privátní klíč a autentizuje jej. V opačném případě mu je přístup odepřen.

Výhodou je, že privátní klíč ani heslo se během tohoto procesu ověřování sítí neposílá.

4. Klíč vs. heslo

Proč je klíč lepší než heslo

Proč je klíč horší než heslo

5. Generování klíčů (Windows/macOS/Linux)

V příkazovém řádku Windows (nebo terminálu macOS/Linux) zadejte následující příkaz
(znak > pouze značí příkaz příkazového řádku Windows):

> ssh-keygen -t rsa -b 2048

Všechny dotazy stačí „odentrovat“:

Generating public/private rsa key pair.
Enter file in which to save the key (C:\Users\machac/.ssh/id_rsa):
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in C:\Users\machac/.ssh/id_rsa.
Your public key has been saved in C:\Users\machac/.ssh/id_rsa.pub.
The key fingerprint is:
SHA256:7fIrCNcQ4xl1pDa7XM5swLjDgRlwveEt5giAuzT+TSE machac@PC
The key's randomart image is:
+---[RSA 2048]----+
|=.B+.            |
|.Xoo.o           |
|oo.+* .          |
|.+o+ o oS..      |
| .o * + =.       |
|  .o X ..+.      |
|   .o + oo       |
|   ..  . .o.     |
+----[SHA256]-----+

Ve složce

C:\users\<jmeno>\.ssh\

se vytvořily dva soubory (klíče) ve formátu OpenSSH (cs.wikipedia.org/wiki/OpenSSH):

Oba klíče jsou prosté textové soubory obsahující pouze alfanumerické znaky.

Všimněte si, že tečka u .ssh nemá ve Windows význam "skrytý".

6. Aktivace veřejného klíče na serveru

Veřejný klíč id_rsa.pub je potřeba „dopravit“ na server (kvůli snazšímu následnému nastavení přímo do skrytého adresáře ~/.ssh). Toto snadno provedeme v tomtéž příkazovém řádku příkazem scp (secure copy). Příkaz má tvar scp <zdroj> <cíl>:

scp C:/users/<jmeno>/.ssh/id_rsa.pub 10XPrijmeniJ@tux.panska.cz:~/.ssh

Na konci za dvojtečkou je cesta do adresáře, zde ~/.ssh (neboli /home/<jmeno>/.ssh)

Před přesunem si server vyžádá vaše heslo na serveru.

Pro dokončení nastavení veřejného klíče se přihlaste na server (naposledy pomocí hesla) a dokončete nastavení veřejného klíče takto:

$ cd .ssh
$ cat id_rsa.pub >> authorized_keys
$ rm id_rsa.pub
$ chmod 600 authorized_keys

7. Zkouška funkčnosti

Před testem funkčnosti se ze serveru odhlaste:

$ logout

a vyzkoušejte se přihlásit pomocí klíčů (bez hesla):

ssh 10XPrijmeniJ@tux.panska.cz

Pokud jste neudělali chybu v nastavení, systém vás přihlásí bez nutnosti zadávat heslo 👍.

8. Skript SSH config pod Windows

Na lokálním počítači s Windows máme možnost si nadefinovat konfigurace pro připojování ke vzdáleným serverům, např. proto, abychom si nemuseli všechno pamatovat. Stačí vytvořit konfigurační soubor, kam všechny tyto informace zapíšeme a odkud si je příkaz ssh umí načíst.

Ve složce .ssh vytvoříme soubor config:

> C:\Users\<jmeno>\.ssh\config

Soubor musí být bez přípony. K tomu postačí obyčejný Poznámkový blok. Při ukládání zvolte jako typ souboru Všechny soubory (*.*).

Do něj vložíme obsah v následujícím formátu:

Host tux
  Hostname tux.panska.cz
  User 10XPrijmeniJ
  IdentityFile ~/.ssh/id_rsa

9. Připojení pomocí aliasu

Nyní se z Příkazového řádku Windows (cmd) připojíte k serveru aliasem tux:

> ssh tux

Parametr tux musí odpovídat parametru příkazu Host v souboru config (viz výše).

10. Dávkový soubor tux.bat

Pro ještě snazší spouštění na Windows si můžete např. na Ploše vytvořit tzv. dávkový soubor s názvem např. tux.bat, do kterého zapíšete příkaz

ssh tux

Na server se připojíte jednoduše poklepáním na tento soubor.

Pozn: "Dávkový soubor" je prostý textový soubor s příponou .bat. V linuxu je to "skript".

11. Přenos privátního klíče do jiného počítače

Pokud se chcete i doma přihlašovat bez hesla, stačí si soubor s privátním klíčem id_rsa přenést do tohoto počítače a uložit je do stejné složky:

Windows   C:\Users\<jmeno>\.ssh\id_rsa
macOS     /Users/<jmeno>/.ssh/id_rsa
Linux     /home/<jmeno>/.ssh/id_rsa

Dbejte na jeho bezpečné uložení!

12. ⚠️ Možné problémy a jejich řešení

Pokud vám přihlašování klíčem nefunguje, např.

  1. ověření se nedaří
  2. opakovaně se zobrazuje výzva pro ověření

smažte soubor

C:\Users\<jmeno>\.ssh\known_hosts

Tím se "resetují" všechna dříve uložená (ověřená) spojení.