🔐 Jak skonfigurować klucze SSH na Ubuntu 20.04

Uwierzytelnianie za pomocą kluczy SSH to podstawa bezpieczeństwa nowoczesnych serwerów. W przeciwieństwie do haseł, które można łatwo złamać metodą brute force, klucze SSH oferują niezrównane bezpieczeństwo przy zachowaniu wygody użytkowania. Ten przewodnik pokaże Ci krok po kroku, jak skonfigurować i zoptymalizować uwierzytelnianie kluczami SSH na serwerze Ubuntu 20.04.

⚡ Ekspresowe Podsumowanie:

  1. Generowanie kluczy: Utwórz parę kluczy SSH z silnym szyfrowaniem (ssh-keygen -t ed25519)
  2. Wdrożenie kluczy: Skopiuj klucz publiczny na serwer (ssh-copy-id user@server)
  3. Zabezpieczenie serwera: Wyłącz logowanie na konto root i uwierzytelnianie hasłem w konfiguracji SSH
  4. Dodatkowe bezpieczeństwo: Skonfiguruj dwuskładnikowe uwierzytelnianie jako dodatkową warstwę ochrony

🗺️ Spis Treści - Twoja Mapa Drogowa


📚 Podstawy uwierzytelniania kluczem SSH

Zanim przejdziemy do praktycznej konfiguracji, warto zrozumieć podstawy działania kluczy SSH i ich przewagę nad tradycyjnymi hasłami.

Czym są klucze SSH?

SSH (Secure Shell) to protokół umożliwiający bezpieczne połączenie z serwerami zdalnymi. Uwierzytelnianie kluczem SSH opiera się na kryptografii asymetrycznej, gdzie mamy do czynienia z:

  1. Kluczem prywatnym - przechowywany na Twoim komputerze, nigdy nie powinien być udostępniany
  2. Kluczem publicznym - przechowywany na serwerze docelowym, można go swobodnie udostępniać

Kiedy łączysz się z serwerem, Twój klient SSH używa klucza prywatnego do podpisania wiadomości. Serwer weryfikuje podpis za pomocą klucza publicznego, co potwierdza Twoją tożsamość bez konieczności przesyłania hasła przez sieć.

Korzyści z używania kluczy SSH

  • Większe bezpieczeństwo - odporne na ataki typu brute force
  • Wygodniejsze logowanie - nie musisz każdorazowo wpisywać hasła
  • Automatyzacja - idealne dla skryptów i procesów automatycznych
  • Zarządzanie dostępem - łatwe dodawanie i odbieranie dostępu użytkownikom
  • Centralne zarządzanie - możliwość używania tego samego klucza na wielu serwerach

Uwaga: Choć klucze SSH są bezpieczniejsze niż hasła, bezpieczeństwo całego rozwiązania zależy od odpowiedniego zabezpieczenia klucza prywatnego. Zawsze chroń swój klucz prywatny i rozważ zabezpieczenie go hasłem.

🔧 Przygotowanie środowiska

Zanim zaczniemy konfigurację kluczy SSH, upewnijmy się, że mamy wszystko, czego potrzebujemy na obu końcach połączenia.

Wymagania dla klienta (Twój komputer)

  • Zainstalowany klient SSH (dostępny domyślnie w większości dystrybucji Linuxa i macOS)
  • Dla użytkowników Windows: PuTTY, Windows Subsystem for Linux (WSL) lub Git Bash

Wymagania dla serwera (Ubuntu 20.04)

  • Działający serwer z Ubuntu 20.04
  • Zainstalowany OpenSSH server
  • Użytkownik z uprawnieniami sudo

Jeśli serwer OpenSSH nie jest jeszcze zainstalowany na Twoim serwerze Ubuntu, możesz go zainstalować poleceniem:

sudo apt update
sudo apt install openssh-server

Po instalacji upewnij się, że usługa jest uruchomiona:

sudo systemctl status ssh

Powinieneś zobaczyć komunikat informujący, że usługa jest aktywna i uruchomiona.

🔑 Generowanie kluczy SSH

Pierwszym krokiem jest utworzenie pary kluczy (prywatny i publiczny) na Twoim komputerze lokalnym.

Wybór algorytmu kryptograficznego

SSH obsługuje kilka algorytmów kryptograficznych. Najczęściej używane to:

  • RSA - starszy, ale szeroko kompatybilny (minimum 3072 bitów dla dobrego bezpieczeństwa)
  • Ed25519 - nowszy, szybszy i bezpieczniejszy przy mniejszej długości klucza
  • ECDSA - dobry kompromis między bezpieczeństwem a kompatybilnością

Dla nowych konfiguracji zalecamy użycie Ed25519, który oferuje doskonałe bezpieczeństwo i wydajność.

Tworzenie pary kluczy Ed25519

Na Twoim komputerze lokalnym uruchom poniższe polecenie:

ssh-keygen -t ed25519 -C "komentarz opisujący klucz"

Gdzie -t ed25519 określa typ algorytmu, a opcjonalny parametr -C "komentarz" pozwala dodać opis, który pomoże Ci zidentyfikować klucz w przyszłości (np. "klucz do serwera produkcyjnego").

Tworzenie pary kluczy RSA (alternatywna metoda)

Jeśli potrzebujesz kompatybilności ze starszymi systemami, które nie obsługują Ed25519, możesz wygenerować klucz RSA:

ssh-keygen -t rsa -b 4096 -C "komentarz opisujący klucz"

Gdzie -b 4096 określa długość klucza w bitach.

Przebieg procesu generowania klucza

Po uruchomieniu polecenia ssh-keygen, zobaczysz serię pytań:

  1. Lokalizacja klucza:

    Enter file in which to save the key (/home/twojanazwa/.ssh/id_ed25519):

    Domyślna lokalizacja jest zwykle odpowiednia. Naciśnij Enter, aby ją zaakceptować, lub podaj własną ścieżkę.

  2. Hasło zabezpieczające:

    Enter passphrase (empty for no passphrase):
    Enter same passphrase again:

    Silnie zalecamy ustawienie hasła. Chroni ono klucz prywatny w przypadku, gdy ktoś uzyska do niego dostęp.

✨ Pro Tip: Jeśli często używasz SSH i nie chcesz za każdym razem wprowadzać hasła do klucza, rozważ użycie narzędzia ssh-agent, które omówimy w dalszej części artykułu.

Sprawdzenie wygenerowanych kluczy

Po zakończeniu procesu, w katalogu .ssh (lub podanej przez Ciebie lokalizacji) zostaną utworzone dwa pliki:

  • id_ed25519 - Twój klucz prywatny (nigdy nie udostępniaj tego pliku!)
  • id_ed25519.pub - Twój klucz publiczny (ten będziesz dodawać do serwerów)

Możesz je wyświetlić poleceniem:

ls -la ~/.ssh/

📤 Wdrażanie kluczy SSH na serwerze Ubuntu 20.04

Teraz, gdy masz już wygenerowane klucze, możesz skonfigurować serwer Ubuntu 20.04 do akceptowania uwierzytelniania przez klucze.

Metoda 1: Użycie narzędzia ssh-copy-id (rekomendowana)

Najłatwiejszym sposobem jest użycie narzędzia ssh-copy-id:

ssh-copy-id -i ~/.ssh/id_ed25519.pub uzytkownik@twoj-serwer

Zostaniesz poproszony o podanie hasła użytkownika serwera. Po poprawnym uwierzytelnieniu, Twój klucz publiczny zostanie automatycznie dodany do pliku ~/.ssh/authorized_keys danego użytkownika na serwerze.

Metoda 2: Ręczne kopiowanie klucza

Jeśli ssh-copy-id nie jest dostępny (np. na systemach Windows), możesz skopiować klucz ręcznie:

  1. Najpierw wyświetl swój klucz publiczny:

    cat ~/.ssh/id_ed25519.pub
  2. Skopiuj wyświetlony tekst zaczynający się od "ssh-ed25519" i kończący się Twoim komentarzem.

  3. Zaloguj się do serwera Ubuntu:

    ssh uzytkownik@twoj-serwer
  4. Utwórz katalog .ssh i plik authorized_keys (jeśli nie istnieją):

    mkdir -p ~/.ssh
    touch ~/.ssh/authorized_keys
    chmod 700 ~/.ssh
    chmod 600 ~/.ssh/authorized_keys
  5. Otwórz plik authorized_keys w edytorze:

    nano ~/.ssh/authorized_keys
  6. Wklej skopiowany klucz publiczny, zapisz i zamknij plik (w nano: Ctrl+X, Y, Enter).

Weryfikacja konfiguracji

Po dodaniu klucza, spróbuj zalogować się na serwer:

ssh uzytkownik@twoj-serwer

Jeśli ustawiłeś hasło dla klucza, zostaniesz poproszony o jego podanie. Jeśli wszystko zostało skonfigurowane poprawnie, nie będziesz musiał wpisywać hasła użytkownika serwera.

🔒 Zabezpieczenie serwera SSH

Po skonfigurowaniu uwierzytelniania kluczem, warto dodatkowo zabezpieczyć serwer SSH poprzez modyfikację jego konfiguracji.

Edycja pliku konfiguracyjnego SSH

Na serwerze Ubuntu 20.04, otwórz plik konfiguracyjny SSH:

sudo nano /etc/ssh/sshd_config

Zalecane ustawienia bezpieczeństwa

Znajdź i zmodyfikuj (lub dodaj, jeśli nie istnieją) następujące linie:

# Wyłącz logowanie na konto root
PermitRootLogin no

# Wyłącz uwierzytelnianie hasłem
PasswordAuthentication no

# Wyłącz puste hasła
PermitEmptyPasswords no

# Określ, które grupy użytkowników mogą używać SSH
AllowGroups ssh-users sudo

# Ustaw maksymalną liczbę prób uwierzytelniania
MaxAuthTries 3

# Wyłącz tunelowanie agenta X11
X11Forwarding no

# Ustaw limit czasu bezczynności
ClientAliveInterval 300
ClientAliveCountMax 2

Uwaga: Przed wyłączeniem uwierzytelniania hasłem (PasswordAuthentication no), upewnij się, że uwierzytelnianie kluczem działa poprawnie. W przeciwnym razie możesz zablokować dostęp do serwera!

Utworzenie grupy dla użytkowników SSH

Jeśli zdecydowałeś się na ograniczenie dostępu SSH tylko do konkretnej grupy (AllowGroups ssh-users), musisz ją utworzyć i dodać odpowiednich użytkowników:

# Utworzenie grupy
sudo groupadd ssh-users

# Dodanie użytkownika do grupy
sudo usermod -aG ssh-users twojanazwaużytkownika

Zmiana domyślnego portu SSH (opcjonalnie)

Zmiana domyślnego portu SSH (22) na niestandardowy może pomóc w uniknięciu automatycznych skanów i ataków:

# W pliku /etc/ssh/sshd_config znajdź i zmień
Port 2222  # Możesz wybrać dowolny nieużywany port powyżej 1024

✨ Pro Tip: Jeśli zmienisz port SSH, pamiętaj o odpowiedniej konfiguracji firewalla i przyszłych połączeń SSH (np. ssh -p 2222 uzytkownik@twoj-serwer).

Restart usługi SSH

Po wprowadzeniu zmian w konfiguracji, zrestartuj usługę SSH, aby zmiany weszły w życie:

sudo systemctl restart ssh

🛡️ Zaawansowane techniki bezpieczeństwa

Dla jeszcze lepszego zabezpieczenia dostępu SSH, możesz wdrożyć dodatkowe mechanizmy.

Użycie ssh-agent do zarządzania kluczami

Jeśli zabezpieczyłeś swój klucz prywatny hasłem, ssh-agent pozwala na jednokrotne wprowadzenie hasła dla całej sesji:

# Uruchomienie agenta (jeśli nie jest automatycznie uruchamiany)
eval "$(ssh-agent)"

# Dodanie klucza do agenta
ssh-add ~/.ssh/id_ed25519

Dla macOS i wielu dystrybucji Linuxa, ssh-agent jest automatycznie uruchamiany, więc potrzebujesz tylko polecenia ssh-add.

Konfiguracja dla wielu kluczy i serwerów

Jeśli korzystasz z wielu kluczy dla różnych serwerów, warto skonfigurować plik ~/.ssh/config:

# Ogólne ustawienia
Host *
    ServerAliveInterval 60
    ServerAliveCountMax 3

# Serwer produkcyjny
Host produkcja
    HostName produkacja.przyklad.com
    User admin
    Port 2222
    IdentityFile ~/.ssh/id_ed25519_produkcja

# Serwer testowy
Host test
    HostName test.przyklad.com
    User developer
    IdentityFile ~/.ssh/id_ed25519_test

Z taką konfiguracją możesz po prostu wpisać ssh produkcja zamiast ssh -p 2222 admin@produkcja.przyklad.com -i ~/.ssh/id_ed25519_produkcja.

Wdrożenie uwierzytelniania dwuskładnikowego (2FA)

Dla najwyższego poziomu bezpieczeństwa, możesz skonfigurować dwuskładnikowe uwierzytelnianie dla SSH:

  1. Zainstaluj Google Authenticator na serwerze:

    sudo apt update
    sudo apt install libpam-google-authenticator
  2. Skonfiguruj dla swojego użytkownika:

    google-authenticator
  3. Odpowiedz na pytania konfiguracyjne (zalecamy odpowiedzi "y" na wszystkie pytania).

  4. Zmodyfikuj plik PAM dla SSH:

    sudo nano /etc/pam.d/sshd

    Dodaj na końcu pliku:

    auth required pam_google_authenticator.so
  5. Edytuj konfigurację SSH:

    sudo nano /etc/ssh/sshd_config

    Znajdź i zmień:

    ChallengeResponseAuthentication yes
    AuthenticationMethods publickey,keyboard-interactive
  6. Zrestartuj usługę SSH:

    sudo systemctl restart ssh

Teraz podczas logowania będziesz potrzebować zarówno klucza SSH, jak i kodu jednorazowego z aplikacji Google Authenticator.

📋 Zarządzanie kluczami SSH

Efektywne zarządzanie kluczami SSH jest ważnym aspektem bezpieczeństwa i administracji systemem.

Dodawanie nowych kluczy

Aby dodać nowy klucz dla użytkownika, po prostu dodaj jego klucz publiczny do pliku ~/.ssh/authorized_keys:

echo "ssh-ed25519 AAAAC3Nz... komentarz" >> ~/.ssh/authorized_keys

Usuwanie kluczy

Aby usunąć klucz, edytuj plik authorized_keys i usuń odpowiednią linię:

nano ~/.ssh/authorized_keys

Rotacja kluczy

Dobrą praktyką bezpieczeństwa jest okresowa zmiana kluczy:

  1. Wygeneruj nowy klucz:

    ssh-keygen -t ed25519 -C "nowy klucz - data utworzenia"
  2. Dodaj nowy klucz do serwera:

    ssh-copy-id -i ~/.ssh/id_ed25519_new.pub uzytkownik@twoj-serwer
  3. Przetestuj logowanie z nowym kluczem:

    ssh -i ~/.ssh/id_ed25519_new uzytkownik@twoj-serwer
  4. Po potwierdzeniu, że nowy klucz działa, usuń stary klucz z pliku authorized_keys na serwerze.

Wyświetlanie odcisku palca klucza

Aby zweryfikować autentyczność klucza, możesz sprawdzić jego odcisk palca:

ssh-keygen -l -f ~/.ssh/id_ed25519.pub

To przydatna funkcja przy weryfikacji, czy używasz odpowiedniego klucza.

🐧 Rozwiązywanie typowych problemów z kluczami SSH

Podczas konfiguracji kluczy SSH mogą pojawić się różne problemy. Oto rozwiązania najczęstszych z nich:

Problem: Odmowa dostępu mimo poprawnej konfiguracji klucza

Rozwiązanie:

  1. Sprawdź uprawnienia plików i katalogów:

    chmod 700 ~/.ssh
    chmod 600 ~/.ssh/authorized_keys
  2. Upewnij się, że katalog domowy nie jest zapisywalny przez innych użytkowników:

    chmod 755 ~
  3. Sprawdź logi SSH dla szczegółowych informacji:

    sudo tail -f /var/log/auth.log

Problem: Klucz nie jest używany pomimo jego dostępności

Rozwiązanie:

  1. Wymuszenie użycia określonego klucza:

    ssh -i ~/.ssh/konkretny_klucz uzytkownik@twoj-serwer -v

    Flaga -v (verbose) pokaże szczegółowe informacje, w tym próby używania kluczy.

  2. Upewnij się, że serwer ma włączone uwierzytelnianie kluczem publicznym:

    # W /etc/ssh/sshd_config
    PubkeyAuthentication yes

Problem: Utrata klucza prywatnego

Rozwiązanie:

  1. Jeśli nadal masz dostęp do serwera przez hasło, zaloguj się i dodaj nowy klucz publiczny.

  2. Jeśli używasz klucza do wszystkich połączeń i nie masz dostępu przez hasło, skontaktuj się z administratorem serwera lub dostawcą usług hostingowych.

  3. W przypadku serwerów w chmurze, niektóre platformy oferują możliwość resetowania dostępu poprzez konsolę administracyjną.

Problem: SSH pyta o hasło mimo poprawnej konfiguracji klucza

Rozwiązanie:

  1. Upewnij się, że plik ~/.ssh/config ma poprawne uprawnienia:

    chmod 600 ~/.ssh/config
  2. Sprawdź, czy klucz został dodany do agenta SSH:

    ssh-add -l

    Jeśli Twojego klucza nie ma na liście, dodaj go:

    ssh-add ~/.ssh/id_ed25519

❓ FAQ - Odpowiedzi na najczęściej zadawane pytania

Czy powinienem używać tego samego klucza SSH dla wszystkich serwerów?
Z perspektywy bezpieczeństwa, lepiej używać oddzielnych kluczy dla różnych serwerów lub przynajmniej kategorii serwerów (np. inny klucz dla serwerów produkcyjnych, inny dla testowych). W przypadku kompromitacji jednego klucza, pozostałe serwery pozostaną bezpieczne.

Jak często powinienem zmieniać klucze SSH?
Klucze SSH z silnym szyfrowaniem (4096 bitów RSA lub Ed25519) są bardzo bezpieczne i nie wymagają częstej zmiany jak hasła. Zaleca się rotację co 1-2 lata lub przy zmianach personalnych w zespole.

Czy mogę używać kluczy SSH z aplikacji mobilnych?
Tak, istnieją aplikacje SSH dla Androida i iOS, które obsługują klucze. Przykłady to Termius, JuiceSSH (Android) czy Blink Shell (iOS).

Czy klucze SSH mogą być używane do uwierzytelniania w innych usługach niż SSH?
Tak, ten sam format kluczy jest często używany do uwierzytelniania w usługach takich jak GitHub, GitLab, czy niektórych systemach CI/CD.

Co zrobić, jeśli podejrzewam, że mój klucz prywatny został skompromitowany?
Natychmiast wygeneruj nowe klucze, zaloguj się na wszystkie serwery i usuń stary klucz publiczny z plików authorized_keys. Monitoruj logi pod kątem nieautoryzowanych dostępów.

🏁 Podsumowanie - Bezpieczny dostęp SSH z kluczami

Skonfigurowanie uwierzytelniania kluczem SSH na serwerach Ubuntu 20.04 znacząco podnosi poziom bezpieczeństwa i wygody zarządzania infrastrukturą. Podsumowując najważniejsze punkty:

  1. Klucze SSH oferują lepsze bezpieczeństwo niż hasła - są praktycznie odporne na ataki brute force i keyloggery.

  2. Generowanie kluczy jest proste - zalecamy algorytm Ed25519 dla nowych konfiguracji.

  3. Wdrożenie na serwerze wymaga kilku kroków - narzędzie ssh-copy-id znacznie upraszcza ten proces.

  4. Dodatkowe zabezpieczenia są kluczowe - wyłączenie logowania na konto root i uwierzytelniania hasłem to minimum.

  5. Zarządzanie kluczami wymaga dyscypliny - regularna rotacja kluczy i ścisła kontrola dostępu to dobre praktyki.

Pamiętaj, że nawet najlepsze klucze SSH nie zastąpią kompleksowej strategii bezpieczeństwa. Stosuj aktualizacje systemu, monitoruj logi i implementuj zasadę najmniejszych uprawnień.

🚀 Potrzebujesz serwera z bezpiecznym dostępem SSH?

W IQHost oferujemy serwery VPS i dedykowane z systemem Ubuntu 20.04, skonfigurowane z myślą o bezpieczeństwie. Nasze serwery są gotowe do użycia z zabezpieczonym SSH, regularnie aktualizowanym oprogramowaniem i zaawansowaną ochroną przed włamaniami.

Sprawdź naszą ofertę serwerów VPS

Potrzebujesz pomocy w konfiguracji bezpiecznego SSH? Nasi eksperci chętnie Ci pomogą!

Czy ten artykuł był pomocny?

Wróć do listy wpisów

Twoja strona WordPress działa wolno?

Sprawdź nasz hosting WordPress z ultraszybkimi dyskami NVMe i konfiguracją serwera zoptymalizowaną pod kątem wydajności. Doświadcz różnicy już dziś!

Sprawdź ofertę hostingu
30-dniowa gwarancja zwrotu pieniędzy