ssh-keygen to narzędzie z pakietu OpenSSH, które generuje i zarządza parami kluczy SSH. Zamiast wklepywać hasło do serwera przy każdym logowaniu, tworzysz raz parę: klucz prywatny (zostaje u Ciebie, nigdy go nie oddajesz) i publiczny (wrzucasz na serwer do ~/.ssh/authorized_keys). Od tej chwili logujesz się bezhasłowo i bezpieczniej. Tym samym poleceniem zmienisz też hasło do klucza, wyświetlisz jego odcisk (fingerprint) albo wygenerujesz klucz publiczny z prywatnego, gdy ten pierwszy Ci zaginął.
Składnia i najważniejsze opcje
ssh-keygen [-t typ] [-b bity] [-f plik] [-C komentarz]
-t typ— typ klucza:ed25519(domyślny w nowym OpenSSH i zalecany),rsa,ecdsa, plus warianty-skdla kluczy sprzętowych FIDO.-b bity— liczba bitów. Dla RSA domyślnie 3072; przyed25519ignorowana, bo ten typ ma stałą długość.-f plik— ścieżka pliku wyjściowego klucza prywatnego (publiczny dostanie sufiks.pub).-C komentarz— komentarz doklejany do klucza publicznego, zwykleuser@hostalbo Twój e-mail. Ułatwia rozpoznanie klucza wauthorized_keys.-N fraza— ustawia hasło (passphrase) chroniące klucz prywatny. Pusta wartość-N ""= klucz bez hasła.-p— zmiana hasła istniejącego klucza prywatnego (nie tworzy nowego).-y— odtwarza klucz publiczny z prywatnego i wypisuje go na ekran.-l -f plik— pokazuje fingerprint klucza.
Przykłady użycia
ssh-keygen -t ed25519 -C "jan@laptop"— tworzy nowoczesny klucz Ed25519 z komentarzem; domyślnie zapisze go w~/.ssh/id_ed25519.ssh-keygen -t rsa -b 4096 -C "jan@firma"— klucz RSA 4096-bitowy, gdy stary serwer nie obsługuje Ed25519.ssh-keygen -t ed25519 -f ~/.ssh/deploy_key -N ""— klucz bez hasła do automatyki (CI/CD, deploy), zapisany pod własną nazwą.ssh-keygen -p -f ~/.ssh/id_ed25519— zmienia (lub dodaje) hasło do istniejącego klucza.ssh-keygen -y -f ~/.ssh/id_ed25519— odtwarza klucz publiczny, gdy zgubiłeś plik.pub.
Częste błędy i pułapki
Klucz prywatny nigdy nie opuszcza Twojej maszyny — na serwer wrzucasz wyłącznie plik .pub. Wysłanie prywatnego to klasyka gatunku i realny problem bezpieczeństwa. Do skopiowania klucza publicznego użyj ssh-copy-id, a nie ręcznego doklejania (łatwo o literówkę albo zły znak nowej linii).
Klucz bez hasła (-N "") jest wygodny, ale jeśli ktoś ukradnie plik prywatny, dostaje gotowy dostęp — trzymaj go dla automatyki, nie dla codziennego loginu. Jeśli zmęczyło Cię wpisywanie hasła, dorzuć klucz do ssh-agent zamiast go usuwać.
Uważaj na uprawnienia: SSH odmówi użycia klucza, gdy ~/.ssh lub plik prywatny są zbyt otwarte — trzymaj chmod 700 ~/.ssh i chmod 600 na kluczu prywatnym. I nie nadpisuj przypadkiem starego id_ed25519 — ssh-keygen spyta o potwierdzenie, ale -f z tą samą nazwą bez uwagi potrafi Cię odciąć od serwerów.
Powiązane komendy: ssh, ssh-copy-id, ssh-agent, ssh-add, scp.