Jak i dlaczego używać poleceń ssh-copy-id i ssh-keygen w systemie Linux
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_rsaHasł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_keysAutomatycznie 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-serverJeś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:
Klucze Ed25519 są mniejsze, szybsze i bardziej bezpieczne.
b) Ogranicz uprawnienia do plików kluczy
chmod 700 ~/.sshchmod 600 ~/.ssh/id_rsachmod 644 ~/.ssh/id_rsa.pubSSH 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_configUstaw:
PasswordAuthentication no
ChallengeResponseAuthentication noUsePAM yesNastępnie uruchom ponownie SSH:
sudo systemctl restart sshd) 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_rsaTo buforuje twój klucz na sesję.
Rozwiązywanie powszechnych problemów
| Problem | Możliwa przyczyna | Rozwiązanie |
|---|---|---|
| Wciąż prosi o hasło | Błędne uprawnienia lub brakujący klucz | Sprawdź uprawnienia ~/.ssh i authorized_keys |
| Błąd „Odmowa dostępu” | Błędna nazwa użytkownika lub IP | Potwierdź poprawne dane logowania |
| ssh-copy-id nie znaleziono | Brakujący program | Zainstaluj za pomocą: sudo apt install openssh-client |
| Klucz zignorowany | Zbyt otwarte uprawnienia plików | Uruchom 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.


