Ssh – jak skonfigurować klucze i połączyć się bez hasła

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.

Czym 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:

  1. Wybierz typ klucza RSA i ustaw długość na 4096 bitów dla wysokiego poziomu bezpieczeństwa.
  2. Kliknij „Generate” i poruszaj kursorem myszy w pustym polu, aby wygenerować losowe dane.
  3. Po utworzeniu klucza zapisz plik prywatny wybierając „Save private key”.
  4. 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-512 i hmac-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.

Picture of Tomasz Zieliński
Tomasz Zieliński

Tomasz zajmuje się tematyką SEO, sztucznej inteligencji i automatyzacji pracy w marketingu internetowym. W swoich artykułach analizuje zmiany w algorytmach wyszukiwarek, rozwój narzędzi AI oraz nowe sposoby tworzenia i optymalizacji treści. Interesuje go przede wszystkim to, jak technologia wpływa na codzienną pracę specjalistów SEO, marketerów i twórców internetowych.

Facebook
Twitter
LinkedIn
Pinterest

Najnowsze Wpisy

Śledź nas