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
- Zaloguj się do panelu dostawcy (Hetzner, DigitalOcean, Vultr itp.)
- Znajdź sekcję SSH Keys (Security → SSH Keys)
- Kliknij Add SSH Key
- Wklej klucz (⌘+V)
- 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-addz 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ć.
- Win+R → wpisz
services.msc→ Enter - Znajdź OpenSSH Authentication Agent
- Kliknij prawym → Właściwości
- Typ uruchomienia: Automatyczny
- 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 ~/.sshichmod 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)"przedssh-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
- Masz backup klucza w KeePassXC → eksportujesz klucz na nowy komputer →
ssh-add→ działasz dalej - 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.






