Podstawy Linux #3: Klucze SSH

Klucze SSH zastępują logowanie hasłem. Zamiast wpisywać hasło za każdym razem, serwer rozpoznaje Cię po kluczu. Jest to bezpieczniejsze (klucz ma tysiące bitów, hasło kilkanaście znaków) i wygodniejsze.

Jak to działa?

Generujesz parę kluczy: – Klucz prywatny (moj-serwer) — zostaje na Twoim komputerze. Nigdy go nikomu nie udostępniaj!Klucz publiczny (moj-serwer.pub) — trafia na serwer. Możesz go bezpiecznie udostępniać.

Przy logowaniu serwer sprawdza, czy Twój klucz prywatny pasuje do publicznego. Jeśli tak — wpuszcza Cię bez hasła.


macOS — generowanie i konfiguracja

Krok 1: Wygeneruj klucz

ssh-keygen -t ed25519 -C moj-serwer -f ~/.ssh/moj-serwer
  • -t ed25519 — typ klucza (nowoczesny, bezpieczny)
  • -C moj-serwer — komentarz/etykieta
  • -f ~/.ssh/moj-serwer — nazwa pliku klucza

Po uruchomieniu zobaczysz:

Enter passphrase (empty for no passphrase):

To jest hasło do klucza (passphrase) — dodatkowe zabezpieczenie. Jeśli ktoś zdobędzie Twój plik klucza, bez tego hasła go nie użyje.

  • Zalecane: wpisz hasło (nie zobaczysz go na ekranie — to normalne) i potwierdź jeszcze raz
  • Szybka opcja: naciśnij Enter dwa razy (bez hasła) — wygodniejsze, ale mniej bezpieczne

💡 Kiedy ustawić hasło?

  • Masz laptopa, który nosisz ze sobą → ustaw hasło (jeśli ktoś ukradnie laptopa, sam klucz mu nie wystarczy)
  • To komputer stacjonarny w domu → możesz pominąć, ale hasło nigdy nie zaszkodzi

Krok 2: Skopiuj klucz publiczny

cat ~/.ssh/moj-serwer.pub | pbcopy

Klucz jest teraz w schowku.

Krok 3: Dodaj klucz u dostawcy VPS

  1. Zaloguj się do panelu dostawcy (Hetzner, DigitalOcean, Vultr itp.)
  2. Znajdź sekcję SSH Keys (Security → SSH Keys)
  3. Kliknij Add SSH Key
  4. Wklej klucz (⌘+V)
  5. Nadaj nazwę (np. “MacBook”)

Krok 4: Utwórz serwer z kluczem

Podczas tworzenia nowego serwera zaznacz swój klucz SSH. Zostanie automatycznie dodany.

Krok 5: Dodaj klucz do agenta SSH (na swoim komputerze)

Agent SSH to program działający w tle, który przechowuje odblokowane klucze w pamięci. Dzięki niemu nie musisz wpisywać passphrase przy każdym połączeniu — robisz to raz, a agent zapamiętuje klucz do momentu wylogowania z komputera.

ssh-add ~/.ssh/moj-serwer

Jeśli ustawiłeś passphrase (hasło do klucza), agent zapyta o nie teraz. Wpisujesz raz — i gotowe.

Krok 6: Skonfiguruj plik ~/.ssh/config (na swoim komputerze)

nano ~/.ssh/config

Wklej:

Host moj-serwer
  HostName ADRES_IP_SERWERA
  User root
  IdentityFile ~/.ssh/moj-serwer
  AddKeysToAgent yes
  • AddKeysToAgent yes — sprawia, że przy kolejnych logowaniach (np. po restarcie komputera) klucz automatycznie trafia do agenta. Dzięki temu nie musisz ręcznie powtarzać ssh-add z kroku 5.

💡 User root — to tymczasowe

Na początku logujesz się jako root, bo to jedyny użytkownik na świeżym serwerze. Po utworzeniu własnego użytkownika zmienisz tu User root na User roman (lub jak nazwiesz swoje konto).

Zapisz (CTRL+O, Enter, CTRL+X).

Krok 7: Zaloguj się

ssh moj-serwer

Windows 10/11 — generowanie i konfiguracja

Krok 1: Otwórz PowerShell

Win+X → Terminal lub Windows PowerShell.

Krok 2: Wygeneruj klucz

ssh-keygen -t ed25519 -C moj-serwer -f $env:USERPROFILE\.ssh\moj-serwer

Zapyta o passphrase (hasło do klucza) — tak samo jak na macOS. Ustaw hasło lub naciśnij Enter dwa razy żeby pominąć.

Krok 3: Skopiuj klucz publiczny

Get-Content $env:USERPROFILE\.ssh\moj-serwer.pub | Set-Clipboard

Krok 4: Dodaj klucz u dostawcy VPS

Identycznie jak na macOS — wklej klucz (Ctrl+V) w panelu dostawcy.

Krok 5: Aktywuj OpenSSH Authentication Agent

⚠️ Ważne

Na Windows agent SSH (patrz wyjaśnienie w sekcji macOS, krok 5) nie jest domyślnie włączony. Bez tego kroku ssh-add nie będzie działać.

  1. Win+R → wpisz services.msc → Enter
  2. Znajdź OpenSSH Authentication Agent
  3. Kliknij prawym → Właściwości
  4. Typ uruchomienia: Automatyczny
  5. Kliknij Uruchom, potem OK

Krok 6: Dodaj klucz do agenta

ssh-add $env:USERPROFILE\.ssh\moj-serwer

Jeśli ustawiłeś passphrase, agent zapyta o nie teraz.

Krok 7: Skonfiguruj plik config

Bez tego kroku zamiast wygodnego ssh moj-serwer musisz za każdym razem pisać pełną komendę ssh root@ADRES_IP_SERWERA.

notepad $env:USERPROFILE\.ssh\config

Wklej:

Host moj-serwer
  HostName ADRES_IP_SERWERA
  User root
  IdentityFile ~/.ssh/moj-serwer
  AddKeysToAgent yes

ℹ️ Ścieżka ~/.ssh/ na Windows

OpenSSH na Windows rozumie ~ jako Twój folder domowy (np. C:\Users\Jan), więc ścieżka ~/.ssh/moj-serwer działa poprawnie.

Krok 8: Zaloguj się

ssh moj-serwer

Kopiowanie klucza do istniejącego serwera

Powyższe kroki zakładały tworzenie nowego serwera z kluczem dodanym przez panel VPS. Jeśli masz już działający serwer, na który logujesz się hasłem — użyj poniższych metod, żeby dodać do niego swój klucz.

macOS/Linux — metoda automatyczna

ssh-copy-id -i ~/.ssh/moj-serwer.pub UŻYTKOWNIK@ADRES_SERWERA

Podasz hasło ostatni raz. Gotowe.

macOS/Linux — metoda ręczna

cat ~/.ssh/moj-serwer.pub | ssh UŻYTKOWNIK@ADRES_SERWERA "mkdir -p ~/.ssh && chmod 700 ~/.ssh && cat >> ~/.ssh/authorized_keys && chmod 600 ~/.ssh/authorized_keys"

Windows

type $env:USERPROFILE\.ssh\moj-serwer.pub | ssh UŻYTKOWNIK@ADRES_SERWERA "mkdir -p ~/.ssh && chmod 700 ~/.ssh && cat >> ~/.ssh/authorized_keys && chmod 600 ~/.ssh/authorized_keys"

Kopiowanie klucza do nowego użytkownika

Po utworzeniu użytkownika na serwerze (lekcja 004) musisz skopiować do niego klucz:

ssh-copy-id -i ~/.ssh/moj-serwer.pub NOWY_UŻYTKOWNIK@ADRES_SERWERA

Następnie zaktualizuj ~/.ssh/config:

Host moj-serwer
  HostName ADRES_SERWERA
  User NOWY_UŻYTKOWNIK
  IdentityFile ~/.ssh/moj-serwer

Wyłączenie logowania hasłem na serwerze

Po skonfigurowaniu kluczy warto wyłączyć logowanie hasłem — wtedy nikt nie wejdzie na serwer bez Twojego klucza.

⚠️ Zanim to zrobisz

Upewnij się, że logowanie kluczem działa! Przetestuj w nowym oknie terminala: ssh moj-serwer. Jeśli wpuszcza bez pytania o hasło — możesz bezpiecznie wyłączyć hasła.

Krok 1: Zaloguj się na serwer i otwórz konfigurację SSH

sudo nano /etc/ssh/sshd_config

Krok 2: Znajdź i zmień te linie

PasswordAuthentication no
PubkeyAuthentication yes

💡 Szybkie wyszukiwanie w nano

Naciśnij CTRL+W, wpisz PasswordAuthentication i Enter — nano przeskoczy do tej linii. Jeśli jest zakomentowana (#PasswordAuthentication), usuń # na początku.

Krok 3: Zapisz i zrestartuj SSH

sudo systemctl restart sshd

Krok 4: Przetestuj (nie zamykaj starego terminala!)

Otwórz nowe okno terminala i spróbuj się zalogować:

ssh moj-serwer

Jeśli działa — gotowe. Jeśli nie — w starym terminalu cofnij zmiany.

📋 Co się zmienia?

  • Przed: ktoś może próbować zgadywać hasło do Twojego serwera (brute-force)
  • Po: serwer w ogóle nie akceptuje haseł — bez klucza nie da się wejść
  • To jedna z najważniejszych rzeczy, które powinieneś zrobić po konfiguracji VPS

Więcej o zabezpieczeniach serwera → Zabezpieczenie serwera


Rozwiązywanie problemów

“Permission denied (publickey)”

  • Sprawdź czy klucz jest dodany do agenta: ssh-add -l
  • Na Windows: sprawdź czy usługa OpenSSH Authentication Agent działa
  • Sprawdź uprawnienia na serwerze: chmod 700 ~/.ssh i chmod 600 ~/.ssh/authorized_keys

“Could not open a connection to your authentication agent”

  • Windows: aktywuj usługę OpenSSH Authentication Agent
  • macOS/Linux: uruchom eval "$(ssh-agent -s)" przed ssh-add

Debug połączenia

ssh -v moj-serwer

💡 Częsty błąd

W pliku ~/.ssh/config pole nazywa się IdentityFile (nie “Identify” ani “Identity”). Literówka tu = klucz nie zostanie użyty.


Bezpieczeństwo i przechowywanie kluczy

Podstawowe zasady

  • Nigdy nie udostępniaj pliku bez .pub — to Twój klucz prywatny
  • Ustaw hasło (passphrase) na kluczu — chroni jeśli ktoś uzyska dostęp do pliku
  • Po skonfigurowaniu kluczy — wyłącz logowanie hasłem (sekcja wyżej)

Gdzie przechowywać klucze prywatne?

Klucz prywatny to “klucz do Twoich serwerów”. Jeśli go stracisz — nie wejdziesz. Jeśli ktoś go zdobędzie — wejdzie za Ciebie. Dlatego warto mieć backup i chronić oryginał.

Na komputerze (domyślnie)

Klucze lądują w ~/.ssh/ — to standardowe miejsce. System chroni ten folder uprawnieniami (700). To wystarczy do codziennej pracy, ale nie jest to backup — jeśli padnie dysk, tracisz klucze.

Menedżer haseł (zalecane)

Najwygodniejszy sposób na backup kluczy:

  • KeePassXC (darmowy, offline) — obsługuje SSH Agent, może automatycznie ładować klucze przy odblokowaniu bazy. Plik bazy (.kdbx) możesz trzymać na Google Drive / Dropbox — sama baza jest zaszyfrowana Twoim głównym hasłem, więc nawet jeśli ktoś ją pobierze, bez hasła jej nie otworzy
  • 1Password — wbudowana obsługa kluczy SSH, synchronizacja między urządzeniami
  • Bitwarden — możesz przechowywać klucz jako załącznik lub w notatce

💡 KeePassXC + SSH Agent

KeePassXC potrafi działać jako agent SSH — dodajesz klucz do wpisu w bazie, a KeePassXC automatycznie udostępnia go przy logowaniu SSH. Nie musisz ręcznie robić ssh-add.

Konfiguracja: Wpis → Zaawansowane → Załączniki → dodaj plik klucza → w zakładce SSH Agent zaznacz “Dodaj klucz do agenta przy odblokowaniu”.

Zaszyfrowany pendrive / dysk zewnętrzny

Dobry jako offline backup w bezpiecznym miejscu (szuflada, sejf):

Te komendy wykonujesz na swoim komputerze (nie na serwerze!):

# Na swoim komputerze — skopiuj klucze na pendrive
cp ~/.ssh/moj-serwer /Volumes/PENDRIVE/ssh-backup/
cp ~/.ssh/moj-serwer.pub /Volumes/PENDRIVE/ssh-backup/

⚠️ Ważne

Pendrive musi być zaszyfrowany (np. VeraCrypt, BitLocker, macOS Disk Utility z szyfrowaniem). Niezaszyfrowany pendrive z kluczami = zostawienie klucza do domu pod wycieraczką.

Gdzie NIE trzymać kluczy

  • E-mail, Slack, Messenger — klucz prywatny w wiadomości to katastrofa
  • Google Drive / Dropbox bez szyfrowania — każdy kto uzyska dostęp do konta, ma Twoje klucze
  • Repozytorium Git — nawet prywatne repo to zły pomysł (historia commitów pamięta wszystko)
  • Notatki w telefonie — brak szyfrowania, łatwy dostęp

📋 Scenariusz: padł Ci dysk

  1. Masz backup klucza w KeePassXC → eksportujesz klucz na nowy komputer → ssh-add → działasz dalej
  2. Nie masz backupu → musisz wygenerować nowy klucz, dodać go do każdego serwera (logując się przez panel VPS / konsolę ratunkową) i zaktualizować config. Przy 5 serwerach to pół godziny stresu.
Roman Rozenberger
Roman Rozenberger

Jestem digital marketerem ze specjalizacją w marketingu w wyszukiwarkach internetowych. Wdrażam automatyzacje z wykorzystaniem narzędzi LowCode, NoCode i AI. Identyfikuje procesy i rozwiązuję problemy.

Dodaj komentarz

Twój adres e-mail nie zostanie opublikowany. Wymagane pola są oznaczone *