30 kwietnia 2025 · 11m read

Jak skonfigurować klucze SSH na Ubuntu 20.04 - kompleksowy przewodnik

Dowiedz się, jak bezpiecznie skonfigurować uwierzytelnianie kluczem SSH na Ubuntu 20.04. Ten praktyczny przewodnik poprowadzi Cię przez generowanie kluczy, ich wdrażanie oraz zaawansowane techniki zabezpieczania dostępu SSH do serwera.

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


📚 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ą!

About the author
ZI

Zespół IQhost

Team

Polski zespół hostingowy. Piszemy o tym co używamy sami.

Potwierdź