Jak wygenerować klucz SSH?
Klucz SSH wygenerujesz na każdym systemie i w większości przypadków nie potrzebujesz do tego żadnego dodatkowego programu. Windows 10 i 11, Linux oraz macOS mają wbudowane polecenie ssh-keygen. Osobna aplikacja przydaje się tylko wtedy, gdy łączysz się programem PuTTY: ten wymaga klucza prywatnego w swoim formacie .ppk.
Po co klucz zamiast hasła?
Hasło da się podejrzeć, zgadnąć, wyłudzić phishingiem albo znaleźć w wycieku cudzej bazy. Przy logowaniu wędruje do serwera, a serwer je sprawdza. Klucz działa inaczej: jego tajna połowa nigdy nie opuszcza Twojego komputera, a serwer weryfikuje tylko podpis, który nią wykonałeś.
Klucz to zawsze para plików
To najważniejsza rzecz do zapamiętania z całego poradnika. Powstają dwa pliki i mają zupełnie różne przeznaczenie:
| Klucz prywatny | Klucz publiczny |
|---|---|
| Zostaje na Twoim dysku | Trafia na serwer |
| Nie wysyłasz go nikomu | Możesz przekazać dalej, także nam |
| Możesz zabezpieczyć go hasłem | Jawny, nie jest tajemnicą |
Uwaga! Dla bezpieczeństwa, nigdy nie przekazuj klucz prywatnego. Tylko klucz publiczny SSH może trafiać do osób trzecich. Tylko klucz publiczny możesz przekazywać dalej.
Najprościej: polecenie ssh-keygen
Windows 10 i 11
Od Windows 10 klient SSH jest częścią systemu, więc wystarczy PowerShell albo Terminal Windows. Wydaj polecenie:
ssh-keygen
Program zapyta, gdzie zapisać klucz, a potem dwa razy o hasło. Domyślnie tworzy parę plików id_rsa (klucz prywatny) i id_rsa.pub (klucz publiczny) w katalogu %USERPROFILE%\.ssh.
Sprawdzisz, czy masz klienta, poleceniem ssh -V. Jeśli w odpowiedzi widzisz na przykład
OpenSSH_for_Windows_9.5p2, wszystko jest na miejscu.
Domyślnie powstaje klucz RSA. Dziś standardem jest Ed25519 - krótszy i szybszy, a bezpieczeństwo nie ustępuje RSA. Poprosisz o niego, dopisując algorytm do polecenia:
ssh-keygen -t ed25519
To nie jest hasło do serwera. Hasło do serwera wędrowało przez sieć, a serwer je sprawdzał, i właśnie jego pozbywasz się, przechodząc na klucze. Hasło, które nadajesz kluczowi, nigdzie nie jest wysyłane: szyfruje plik klucza prywatnego na Twoim dysku, żeby ktoś, kto przejmie Twój komputer, nie dostał gotowego wejścia na serwer.
Dlatego przy pierwszym połączeniu w danej sesji program poprosi o to hasło. Żeby nie wpisywać go za każdym razem, wczytaj klucz raz do agenta: Pageant wchodzi w skład pakietu PuTTY, a na Linuksie i macOS służy do tego ssh-agent.
Hasło do klucza nie jest obowiązkowe. W praktyce wiele osób go nie nadaje i nadal jest to rozwiązanie bezpieczniejsze niż logowanie hasłem: klucza nie da się zgadnąć z internetu, wyłudzić phishingiem ani znaleźć w wycieku bazy haseł. Ryzyko przenosi się z sieci na Twój komputer, więc jeśli rezygnujesz z hasła, zadbaj o szyfrowanie dysku i nie zostawiaj klucza na cudzej maszynie.
Klucz bez hasła jest też jedynym sensownym wyborem tam, gdzie nikt nie może go wpisać: w skryptach, zadaniach cron i automatycznych wdrożeniach.
Linux
W systemie Linux sprawa jest o wiele prostsza. Wystarczy dostęp do terminala tego, gdzie wydajemy komendy i polecenia.
W terminalu wydaj polecenie ssh-keygen.
Analogicznie zostaniesz poproszony o nadanie hasła dla swojego klucza prywatnego (Enter passphrase).
root@srv:~# ssh-keygen
Generating public/private rsa key pair.
Enter file in which to save the key (/root/.ssh/id_rsa):
Created directory '/root/.ssh'.
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /root/.ssh/id_rsa
Your public key has been saved in /root/.ssh/id_rsa.pub
The key fingerprint is:
SHA256:JpfhpRfogE8z3hK1JD0+t/6Wf+XEWhi3236Fci6vSPM root@localhost
The key's randomart image is:
+---[RSA 3072]----+
| .+=o |
|. *++. . |
| + =o.. o . |
| . o...o* . . |
| o..S = o |
| .== . B o|
| . . oB =.|
| . o .o+= +|
| o..... E=+|
+----[SHA256]-----+
root@srv:~#
Jeśli chcemy zwiększyć bezpieczeństwo klucza możemy do polecenia dołączyć parametry:
np. ssh-keygen -t rsa -b 4096
Nasz klucz publiczny dostępny będzie w lokalizacji /root/.ssh/id_rsa.pub w katalogu obecnego użytkownika.
macOS
W terminalu wydaj polecenie ssh-keygen.
Analogicznie zostaniesz poproszony o nadanie hasła dla swojego klucza prywatnego (Enter passphrase).
hitme@Mac-mini playground % ssh-keygen
Generating public/private rsa key pair.
Enter file in which to save the key (/Users/hitme/.ssh/id_rsa):
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /Users/hitme/.ssh/id_rsa.
Your public key has been saved in /Users/hitme/.ssh/id_rsa.pub.
The key fingerprint is:
SHA256:AixW/p+HfOw1HDAn98MpDRZlHDBhwWSoRbwvdxM9IN0 hitme@Mac-mini.local
The key's randomart image is:
+---[RSA 3072]----+
| . o.+@*=. |
| + ++.*.E |
| o + o+.* .. |
| . . oo . .B =.o.|
| o S .o *..|
| + +..ooo. |
| = +o++ . |
| + . . |
| . |
+----[SHA256]-----+
hitme@Mac-mini playground %
Nasz klucz publiczny dostępny będzie w lokalizacji /Users/hitme/.ssh/id_rsa.pub w katalogu obecnego użytkownika.
Klucze publiczne można umieszczać na innych serwerach lub przekazywać je administratorom.
Jak wygenerować klucz SSH programem PuTTYgen?
PuTTY nie czyta kluczy prywatnych w formacie, który tworzy ssh-keygen. Potrzebuje własnego, z rozszerzeniem .ppk, i do tego służy PuTTYgen: wygeneruje nowy klucz albo wczyta istniejący i zapisze go w formacie zrozumiałym dla PuTTY (menu Conversions → Import key). Pobierz pakiet PuTTY z oficjalnej strony projektu. PuTTYgen jest jego częścią, więc nie musisz szukać osobnego pliku: instalator wgrywa go razem z PuTTY, a w wersji przenośnej pobierasz po prostu puttygen.exe.
Generator kluczy pobieraj wyłącznie ze strony projektu PuTTY. To narzędzie tworzy Twój klucz prywatny, a podrobiona kopia z przypadkowego serwisu może wygenerować klucz, który zna ktoś jeszcze. Oficjalna strona to chiark.greenend.org.uk/~sgtatham/putty (kieruje na nią też putty.org).
Uruchom program puttygen.exe. Nie zmieniaj wartości domyślnych. Typ klucza pozostaw na RSA, a ilość bitów minimum 2048.
Obok RSA znajdziesz w programie typ EdDSA, czyli Ed25519. To dzisiejszy standard: klucz jest krótszy i szybszy, a poziom bezpieczeństwa nie ustępuje RSA. Jeśli serwer, z którym się łączysz, przyjmuje takie klucze, możesz wybrać właśnie ten. RSA z długością minimum 2048 bitów pozostaje bezpiecznym i zgodnym ze wszystkim wyborem.
Naciśnij przycisk (1) "Generate" następnie poruszaj trochę myszką, da to programowi losowe dane potrzebne do wygenerowania klucza.
Okienko programu puttygen. Ustawienia klucza SSH.
Klucze zostaną wygenerowane.
Teraz pozostaje nam nadać hasło (passphrase) aby zabezpieczyć klucz prywatny. Dla sensu i bezpieczeństwa użyj długiego hasła i wpisz je w polach (3) Key passphrase.
Okienko programu puttygen. Generowanie kluczy SSH.
Klucz publiczny
(2) Zapisz swój wygenerowany klucz publiczny SSH na dysk komputera. Ten klucz możesz udostępniać.
Przycisk „Save public key" nie daje pliku dla OpenSSH. Zapisuje klucz w formacie RFC 4716, którego wymagają niektóre inne serwery. Podręcznik PuTTY mówi wprost, że serwer OpenSSH potrzebuje klucza publicznego w formacie jednowierszowym.
Dlatego jeśli klucz ma trafić do pliku authorized_keys, nie używaj tego przycisku. Zaznacz zawartość górnego pola okna PuTTYgen, podpisanego Public key for pasting into OpenSSH authorized_keys file, skopiuj ją i wklej na serwerze. To jedna linia zaczynająca się od nazwy algorytmu, na przykład ssh-rsa AAAAB3Nza....
Plik z przycisku „Save public key" przyda się natomiast wtedy, gdy serwer po drugiej stronie oczekuje właśnie formatu RFC 4716.
Klucz prywatny
(3) Zapisz swój klucz prywatny, na dysku komputera. Klucz prywatny będzie zabezpieczony hasłem, które nadałeś. Nie udostępniaj tego klucza nikomu.