Logowanie do serwera przez SSH nie musi oznaczać wpisywania hasła przy każdej próbie połączenia. Zamiast tego możesz użyć bezpieczniejszej i wygodniejszej metody opartej na kluczach kryptograficznych. Cały proces sprowadza się do wygenerowania unikalnej pary kluczy – publicznego i prywatnego – oraz odpowiedniej konfiguracji serwera. Przejście na uwierzytelnianie kluczami SSH nie tylko usprawni Twoją pracę, ale także skutecznie zabezpieczy dostęp do maszyny przed atakami typu brute-force.
Spis treści
ToggleCzym jest SSH i dlaczego warto używać kluczy?
Protokół SSH (Secure Shell) to podstawowe narzędzie umożliwiające bezpieczne, zdalne połączenie z serwerami. Jego główną zaletą jest szyfrowanie całego ruchu sieciowego między klientem a serwerem, co chroni przesyłane dane – w tym polecenia i hasła – przed podsłuchem. Poza zdalnym wykonywaniem poleceń, SSH pozwala na bezpieczne kopiowanie plików (SCP, SFTP) oraz tworzenie szyfrowanych tuneli (port forwarding).
Uwierzytelnianie za pomocą kluczy SSH jest znacznie bezpieczniejszą metodą niż tradycyjne logowanie z hasłem, które jest podatne na ataki brute-force. System opiera się na parze kluczy kryptograficznych, działających w oparciu o kryptografię asymetryczną: kluczu prywatnym przechowywanym lokalnie przez użytkownika oraz kluczu publicznym umieszczanym na serwerze w pliku ~/.ssh/authorized_keys. Serwer weryfikuje tożsamość klienta, porównując klucze, co całkowicie eliminuje ryzyko ataków siłowych. Po skonfigurowaniu kluczy można wyłączyć logowanie hasłem, co znacznie podnosi poziom bezpieczeństwa serwera. Dodatkowo logowanie odbywa się automatycznie, bez konieczności każdorazowego wpisywania hasła.
Jak wygenerować klucze SSH? Metoda Ed25519
Do wygenerowania pary kluczy SSH zaleca się wykorzystanie metody Ed25519, która jest obecnie uznawana za najbezpieczniejszy i najwydajniejszy standard. Na systemach Linux oraz macOS klucz generuje się poleceniem:
ssh-keygen -t ed25519
Narzędzie zapyta o lokalizację zapisu – domyślnie jest to katalog ~/.ssh/; wystarczy potwierdzić Enterem. Następnie można ustawić hasło (passphrase) zabezpieczające klucz prywatny. Choć nie jest ono obowiązkowe, jego zastosowanie zdecydowanie zwiększa bezpieczeństwo, chroniąc klucz przed nieautoryzowanym użyciem, jeśli plik wpadnie w niepowołane ręce. Aby uniknąć wielokrotnego wpisywania hasła podczas jednej sesji, warto użyć ssh-agent, który bezpiecznie przechowuje odblokowany klucz w pamięci.
Po wygenerowaniu pary kluczy klucz publiczny zostanie zapisany jako id_ed25519.pub, a prywatny jako id_ed25519. Do polecenia można dołączyć opcjonalny komentarz, np. adres e-mail, dodając flagę -C "twoj_email@domena.com". Jeśli Ed25519 nie jest obsługiwany, alternatywą jest:
ssh-keygen -t rsa -b 4096
Konfiguracja serwera: dodawanie klucza i uprawnienia
Dodanie klucza publicznego do pliku ~/.ssh/authorized_keys na serwerze jest kluczowym etapem konfiguracji. Najprostszy sposób to użycie jednej komendy:
cat ~/.ssh/id_ed25519.pub | ssh user@adres_ip_serwera "mkdir -p ~/.ssh && cat >> ~/.ssh/authorized_keys"
Polecenie to loguje się na serwer, tworzy katalog .ssh (jeśli nie istnieje) i dopisuje klucz publiczny do pliku z autoryzowanymi kluczami. Prostsze i zalecane podejście to użycie narzędzia ssh-copy-id:
ssh-copy-id user@adres_ip_serwera
Upewnij się, że na serwerze działa usługa OpenSSH.
Niezwykle ważne jest także ustawienie właściwych uprawnień pliku authorized_keys:
chmod 600 ~/.ssh/authorized_keys
Oznacza to, że plik może czytać i zapisywać tylko jego właściciel. Niewłaściwe uprawnienia to jedna z najczęstszych przyczyn problemów z logowaniem za pomocą kluczy.
Jak połączyć się z serwerem za pomocą klucza SSH?
Aby połączyć się z serwerem przy użyciu klucza, wykonaj na komputerze lokalnym polecenie:
ssh user@adres_ip_serwera -i ~/.ssh/id_ed25519
Gdzie user to nazwa użytkownika na serwerze, a adres_ip_serwera – jego adres. Opcja -i wskazuje lokalizację klucza prywatnego do uwierzytelnienia.
Aby uprościć ten proces i uniknąć wpisywania pełnej komendy za każdym razem, można skonfigurować plik ~/.ssh/config, definiując aliasy:
Host moj-serwer HostName 198.51.100.1 User admin Port 22 IdentityFile ~/.ssh/id_ed25519
Po zapisaniu konfiguracji połączenie nawiązujesz po prostu komendą:
ssh moj-serwer
Bez konieczności każdorazowego podawania adresu IP, nazwy użytkownika czy ścieżki do klucza.
Konfiguracja kluczy SSH w systemie Windows (PuTTY)
W systemie Windows popularnym narzędziem do SSH jest PuTTY, które wymaga kluczy w formacie .ppk. Proces zaczyna się w aplikacji PuTTYgen:
- Wybierz typ klucza RSA i ustaw długość na 4096 bitów dla wysokiego poziomu bezpieczeństwa.
- Kliknij „Generate” i poruszaj kursorem myszy w pustym polu, aby wygenerować losowe dane.
- Po utworzeniu klucza zapisz plik prywatny wybierając „Save private key”.
- Skopiuj zawartość pola „Public key for pasting into OpenSSH authorized_keys file” i wklej do serwera w pliku
~/.ssh/authorized_keys.
W głównym oknie PuTTY wpisz adres hosta i port serwera. Następnie przejdź do Connection > SSH > Auth, kliknij „Browse” i wskaż plik .ppk. Po zapisaniu sesji możesz bezpiecznie połączyć się z serwerem.
Bezpieczeństwo kluczy SSH: najlepsze praktyki
Klucz prywatny należy traktować jak najpilniej strzeżoną tajemnicę – jego ujawnienie jest równoznaczne z utratą dostępu do serwera. Samo posiadanie klucza to jednak tylko podstawa. Pełne bezpieczeństwo wymaga także utwardzenia konfiguracji demona SSH (sshd) poprzez edycję pliku /etc/ssh/sshd_config. Do kluczowych działań należą:
- Wyłączenie logowania hasłem – po konfiguracji kluczy jest to podstawowy krok eliminujący ataki brute-force.
- Zablokowanie dostępu dla konta root – wpłynie na to dyrektywa
PermitRootLogin no, która zapobiega bezpośredniemu logowaniu na konto administratora. - Wykorzystanie nowoczesnych algorytmów kryptograficznych – zalecane szyfry to między innymi
aes256-ctr,aes192-ctr,aes128-ctr, a dla MAC –hmac-sha2-512ihmac-sha2-256.
Po wprowadzeniu zmian należy zrestartować demona SSH poleceniem:
sudo systemctl restart ssh
lub
sudo systemctl restart sshd
w zależności od systemu, by aktywować nowe ustawienia.

