Secure Shell (SSH) jest jednym z najczęściej używanych narzędzi do bezpiecznego zarządzania i uzyskiwania dostępu do systemów zdalnych. Zamiast polegać na tradycyjnej autoryzacji opartej na hasłach, która jest mniej bezpieczna i podatna na ataki brute-force, administratorzy systemów często konfigurują autoryzację opartą na kluczach SSH dla lepszego bezpieczeństwa, skalowalności i automatyzacji.

Ten przewodnik wyjaśnia, jak wygenerować klucze SSH przy użyciu ssh-keygen, bezpiecznie skopiować je na zdalny serwer przy użyciu ssh-copy-id, zweryfikować konfigurację i przestrzegać najlepszych praktyk bezpieczeństwa.

Zrozumienie autoryzacji opartej na kluczach SSH

W przypadku kluczy SSH autoryzacja odbywa się za pomocą pary kluczy publicznych i prywatnych:

  • Klucz prywatny (id_rsa) → Pozostaje na twoim lokalnym komputerze i musi być chroniony.
  • Klucz publiczny (id_rsa.pub) → Umieszczany na zdalnym serwerze w ~/.ssh/authorized_keys.
  • Podczas łączenia się SSH używa kryptografii klucza publicznego, aby automatycznie cię uwierzytelnić, nie ujawniając haseł.

Ta metoda jest bezpieczniejsza i wygodniejsza, szczególnie dla programistów, administratorów systemów i automatycznych wdrożeń.

Generowanie kluczy SSH za pomocą ssh-keygen

Uruchom następujące polecenie, aby wygenerować nową parę kluczy SSH:

ssh-keygen -t rsa -b 4096 -C "your_email@example.com"

Wyjaśnienie opcji:

  • -t rsa → Określa algorytm szyfrowania (RSA).
  • -b 4096 → Używa klucza 4096-bitowego dla silniejszego szyfrowania (zalecane).
  • -C → Dodaje komentarz, aby zidentyfikować klucz, zazwyczaj twój adres e-mail lub nazwę użytkownika.

Interaktywne monity:

  • Plik do zapisania klucza → Naciśnij Enter, aby zaakceptować domyślną wartość:
    ~/.ssh/id_rsa

  • Hasło (opcjonalne, ale zalecane) → Dodaje dodatkową warstwę bezpieczeństwa.
    Jeśli jest ustawione, będziesz musiał je wprowadzić podczas używania klucza prywatnego.

Kopiowanie klucza publicznego na zdalny serwer (ssh-copy-id)

Po wygenerowaniu kluczy użyj ssh-copy-id, aby przesłać swój klucz publiczny na zdalny serwer:

ssh-copy-id user@remote-server
  • użytkownik → Nazwa użytkownika na zdalnym serwerze.
  • zdalny-serwer → Nazwa hosta lub adres IP zdalnej maszyny.

To polecenie:

  • Dodaje twój klucz publiczny (id_rsa.pub) do:

    ~/.ssh/authorized_keys
  • Automatycznie ustawia prawidłowe uprawnienia dla katalogu .ssh i pliku klucza.

Alternatywna metoda (ręczna konfiguracja)

Jeśli ssh-copy-id nie jest dostępne, możesz ręcznie skopiować klucz:

cat ~/.ssh/id_rsa.pub | ssh user@remote-server "mkdir -p ~/.ssh && chmod 700 ~/.ssh && cat >> ~/.ssh/authorized_keys && chmod 600 ~/.ssh/authorized_keys"

To polecenie:

  • Tworzy katalog .ssh, jeśli brakuje.
  • Dodaje twój klucz publiczny.
  • Ustawia bezpieczne uprawnienia.

Weryfikacja autoryzacji klucza SSH

Aby potwierdzić, że wszystko działa:

ssh user@remote-server
  • Jeśli skonfigurowano poprawnie, powinieneś zalogować się bez wprowadzania hasła.

  • Jeśli ustawiono hasło, zostaniesz o nie poproszony.

Najlepsze praktyki bezpieczeństwa

a) Używaj silnego szyfrowania

  • Preferuj RSA 4096 lub Ed25519:

    ssh-keygen -t ed25519 -C "your_email@example.com"
  • Klucze Ed25519 są mniejsze, szybsze i bardziej bezpieczne.

b) Ogranicz uprawnienia do plików kluczy

chmod 700 ~/.ssh
chmod 600 ~/.ssh/id_rsa
chmod 644 ~/.ssh/id_rsa.pub

SSH odmówi użycia kluczy, jeśli uprawnienia są zbyt otwarte.

c) Wyłącz autoryzację hasłem (opcjonalne, zalecane)

Na zdalnym serwerze edytuj:

sudo nano /etc/ssh/sshd_config

Ustaw:

PasswordAuthentication no

ChallengeResponseAuthentication no
UsePAM yes

Następnie uruchom ponownie SSH:

sudo systemctl restart ssh

d) Użyj agenta SSH do zarządzania hasłem

Zamiast wpisywać swoje hasło za każdym razem, użyj ssh-agent:

eval "$(ssh-agent -s)"
ssh-add ~/.ssh/id_rsa

To buforuje twój klucz na sesję.

Rozwiązywanie powszechnych problemów

ProblemMożliwa przyczynaRozwiązanie
Wciąż prosi o hasłoBłędne uprawnienia lub brakujący kluczSprawdź uprawnienia ~/.ssh i authorized_keys
Błąd „Odmowa dostępu”Błędna nazwa użytkownika lub IPPotwierdź poprawne dane logowania
ssh-copy-id nie znalezionoBrakujący programZainstaluj za pomocą: sudo apt install openssh-client
Klucz zignorowanyZbyt otwarte uprawnienia plikówUruchom chmod 600 ~/.ssh/id_rsa

Podsumowanie

Użycie ssh-keygen i ssh-copy-id zwiększa bezpieczeństwo i wygodę podczas zarządzania zdalnymi serwerami. Konfigurując autoryzację klucza SSH, administratorzy mogą wyeliminować ryzyko związane z logowaniem opartym na hasłach, jednocześnie upraszczając bezpieczny dostęp.