Gdzie są przechowywane klucze SSH w systemie Linux — i jak nimi bezpiecznie zarządzać
SSH (Secure Shell) jest jednym z najważniejszych narzędzi w ekosystemie Linux. Administratorzy systemów, deweloperzy i inżynierowie DevOps polegają na nim codziennie w celu zdalnego dostępu do serwerów, bezpiecznych transferów plików, automatyzacji wdrażania i zarządzania infrastrukturą. Chociaż większość użytkowników wchodzi w interakcję z SSH za pośrednictwem prostego polecenia terminalowego, rzeczywisty szkielet bezpieczeństwa leży w parach kluczy SSH — poświadczeniach kryptograficznych, które umożliwiają uwierzytelnianie bez hasła, zautomatyzowane przepływy pracy i wzmocnioną kontrolę dostępu.
Niezależnie od tego, czy zarządzasz jedną instancją VPS Hosting czy orkiestrujesz dostęp na wielu Dedicated Servers, zrozumienie dokładnie gdzie są przechowywane klucze SSH — i jak nimi prawidłowo zarządzać — nie jest opcjonalne. To jest fundamentalnym wymogiem bezpieczeństwa.
Ten przewodnik obejmuje wszystko: domyślne lokalizacje przechowywania kluczy, klucze hostów na poziomie systemu, konfiguracje niestandardowe, wymagania dotyczące uprawnień i najlepsze praktyki bezpiecznego zarządzania kluczami.
Czym są klucze SSH i dlaczego są ważne?
Klucze SSH używają kryptografii asymetrycznej do uwierzytelniania użytkowników i serwerów. Każda para kluczy składa się z:
- Klucz prywatny — przechowywany w tajemnicy na maszynie klienta, nigdy nie udostępniany
- Klucz publiczny — umieszczony na zdalnym serwerze w celu weryfikacji tożsamości
Gdy łączysz się z serwerem, SSH używa kryptograficznego uzgodnienia, aby zweryfikować, że posiadasz klucz prywatny odpowiadający kluczowi publicznemu na serwerze — bez konieczności przesyłania samego klucza prywatnego. Jest to fundamentalnie bezpieczniejsze niż uwierzytelnianie oparte na hasłach.
Domyślna lokalizacja przechowywania kluczy SSH (klucze użytkownika)
Dla każdego standardowego użytkownika Linux klucze SSH są przechowywane w ukrytym katalogu w folderze domowym:
~/.ssh/To rozszerza się do pełnej ścieżki:
/home/username/.ssh/Dla użytkownika root w szczególności:
/root/.ssh/Typowe pliki wewnątrz ~/.ssh/
| Plik | Cel |
|---|---|
id_rsa | Domyślny klucz prywatny RSA |
id_rsa.pub | Pasujący klucz publiczny RSA |
id_ecdsa | Klucz prywatny ECDSA |
id_ed25519 | Klucz prywatny Ed25519 (rekomendowany) |
id_*.pub | Odpowiednik klucza publicznego dla dowolnego klucza prywatnego |
authorized_keys | Lista kluczy publicznych uprawnionych do logowania się na to konto |
known_hosts | Odciski palców wcześniej połączonych serwerów |
config | Konfiguracja klienta SSH specyficzna dla użytkownika |
Po uruchomieniu ssh-keygen, klucze są domyślnie zapisywane w tym katalogu, chyba że jawnie określisz inną ścieżkę podczas generowania klucza.
Ogólnosystemowe lokalizacje kluczy SSH (klucze hosta)
Poza kluczami użytkownika, demon SSH daemon (sshd) — komponent po stronie serwera — utrzymuje swój własny zestaw kluczy hosta. Są one przechowywane na poziomie systemu w:
/etc/ssh/Pliki kluczy hosta w /etc/ssh/
| Plik | Cel |
|---|---|
ssh_host_rsa_key | Prywatny klucz hosta RSA |
ssh_host_rsa_key.pub | Publiczny klucz hosta RSA |
ssh_host_ecdsa_key | Prywatny klucz hosta ECDSA |
ssh_host_ecdsa_key.pub | Publiczny klucz hosta ECDSA |
ssh_host_ed25519_key | Prywatny klucz hosta Ed25519 |
ssh_host_ed25519_key.pub | Publiczny klucz hosta Ed25519 |
Te klucze hosta służą innemu celowi niż klucze użytkownika. Gdy klient łączy się z serwerem po raz pierwszy, serwer przedstawia swój publiczny klucz hosta. Klient przechowuje ten odcisk palca w ~/.ssh/known_hosts. Przy kolejnych połączeniach SSH weryfikuje, czy odcisk palca się zgadza — chroniąc przed atakami man-in-the-middle.
> Ważne: Klucze hosta są generowane automatycznie podczas instalacji serwera SSH. Nigdy nie powinieneś musieć ich ręcznie tworzyć, ale powinieneś wiedzieć, gdzie się znajdują w celach audytu i kopii zapasowej.
Niestandardowe lokalizacje kluczy SSH
Nie jesteś ograniczony do domyślnego katalogu ~/.ssh/. Klucze SSH mogą być generowane i przechowywane w dowolnym miejscu w systemie plików. Aby użyć klucza przechowywanego w lokalizacji innej niż domyślna, określ go jawnie:
ssh -i /path/to/custom_key user@hostUżywanie ~/.ssh/config dla wielu kluczy
Zarządzanie wieloma serwerami, projektami lub kontami użytkowników staje się znacznie czystsze dzięki prawidłowo skonfigurowanemu plikowi ~/.ssh/config. Pozwala to na zdefiniowanie ustawień dla każdego hosta, w tym tego, który klucz użyć:
Host production-server
HostName 203.0.113.10
User deploy
IdentityFile ~/.ssh/production_ed25519
Host staging-server
HostName 203.0.113.20
User deploy
IdentityFile ~/.ssh/staging_ed25519
Host github.com
User git
IdentityFile ~/.ssh/github_keyDzięki tej konfiguracji uruchomienie ssh production-server automatycznie używa prawidłowego klucza bez żadnych dodatkowych flag.
Jak klucze SSH są używane: klient vs. serwer
Połączenia wychodzące (strona klienta)
Gdy inicjujesz połączenie SSH, klient SSH szuka kluczy prywatnych w ~/.ssh/ domyślnie. Te klucze są używane do uwierzytelnienia Cię na zdalnym serwerze.
Narzędzia, które używają kluczy klienta SSH, obejmują:
ssh— bezpośredni dostęp do zdalnej powłokiscp— bezpieczne kopiowanie plikówrsync— synchronizacja plików przez SSHgit— podczas korzystania ze zdalnych repozytoriów opartych na SSH
Połączenia przychodzące (strona serwera)
Na serwerze SSH sprawdza określony plik, aby określić, którzy użytkownicy są uprawnieni do połączenia:
~/.ssh/authorized_keysTen plik zawiera jeden klucz publiczny na linię. Każdy wpis przyznaje posiadaczowi odpowiedniego klucza prywatnego uprawnienie do zalogowania się jako ten użytkownik.
Praktyczny przykład: Jeśli użytkownik alice chce SSH na serwer jako użytkownik webadmin, klucz publiczny Alice musi być obecny w /home/webadmin/.ssh/authorized_keys — nie w katalogu domowym Alice na tym serwerze.
Uprawnienia plików — Krytyczne dla bezpieczeństwa SSH
To jest miejsce, gdzie wielu administratorów popełnia kosztowne błędy. SSH jest celowo surowy w kwestii uprawnień do plików. Jeśli uprawnienia są zbyt otwarte, SSH będzie dyskretnie odmawiać użycia Twoich kluczy lub całkowicie odrzucać próby logowania.
Wymagane ustawienia uprawnień
chmod 700 ~/.ssh
chmod 600 ~/.ssh/authorized_keys
chmod 600 ~/.ssh/id_ed25519
chmod 644 ~/.ssh/id_ed25519.pub
chmod 600 ~/.ssh/configTabela referencyjna uprawnień
| Ścieżka | Wymagane uprawnienie | Oktalnie |
|---|---|---|
~/.ssh/ | Tylko odczyt/zapis/wykonanie właściciela | 700 |
~/.ssh/authorized_keys | Tylko odczyt/zapis właściciela | 600 |
~/.ssh/id_rsa (klucz prywatny) | Tylko odczyt/zapis właściciela | 600 |
~/.ssh/id_rsa.pub (klucz publiczny) | Odczyt właściciela, odczyt innych | 644 |
~/.ssh/config | Tylko odczyt/zapis właściciela | 600 |
Aby naprawić uprawnienia w jednym poleceniu:
chmod 700 ~/.ssh && chmod 600 ~/.ssh/* && chmod 644 ~/.ssh/*.pubBezpieczne generowanie kluczy SSH
Zawsze preferuj Ed25519 zamiast RSA dla nowych kluczy. Ed25519 oferuje silniejsze bezpieczeństwo z mniejszymi rozmiarami kluczy i szybszą wydajnością.
ssh-keygen -t ed25519 -C "your_email@example.com"W przypadku starszych systemów wymagających RSA, użyj co najmniej 4096 bitów:
ssh-keygen -t rsa -b 4096 -C "your_email@example.com"Zawsze ustaw hasło dostępu po wyświetleniu monitu. Hasło dostępu szyfruje klucz prywatny na dysku, więc nawet jeśli atakujący uzyska dostęp do twojego systemu plików, nie będzie mógł użyć klucza bez hasła dostępu.
Zarządzanie kluczami za pomocą ssh-agent
Wpisywanie hasła za każdym razem, gdy używasz klucza SSH, staje się niepraktyczne. ssh-agent rozwiązuje ten problem, buforując odszyfrowane klucze w pamięci na czas trwania sesji.
Uruchamianie ssh-agent i dodawanie klucza
eval "$(ssh-agent -s)"
ssh-add ~/.ssh/id_ed25519Zostaniesz poproszony o hasło raz. Następnie operacje SSH automatycznie używają buforowanego klucza.
Przydatne polecenia ssh-agent
# List currently loaded keys
ssh-add -l
# Remove a specific key from the agent
ssh-add -d ~/.ssh/mykey
# Remove all keys from the agent
ssh-add -DKopiowanie kluczy publicznych na serwery zdalne
Najłatwiejszy sposób zainstalowania klucza publicznego na serwerze zdalnym to ssh-copy-id:
ssh-copy-id -i ~/.ssh/id_ed25519.pub user@remote-hostTo dołącza klucz publiczny do ~/.ssh/authorized_keys na serwerze zdalnym i automatycznie ustawia prawidłowe uprawnienia.
Jeśli ssh-copy-id jest niedostępny, zrób to ręcznie:
cat ~/.ssh/id_ed25519.pub | ssh user@remote-host "mkdir -p ~/.ssh && chmod 700 ~/.ssh && cat >> ~/.ssh/authorized_keys && chmod 600 ~/.ssh/authorized_keys"Audyt i debugowanie problemów z kluczami SSH
Szczegółowe logowanie połączeń
Gdy uwierzytelnianie SSH się nie powiedzie, tryb szczegółowy pokazuje dokładnie, co się dzieje:
ssh -v user@hostAby uzyskać jeszcze więcej szczegółów:
ssh -vvv user@hostTo wyjście pokazuje, które pliki tożsamości zostały spróbowane, czy konsultowano agenta, i gdzie uwierzytelnianie się nie powiodło.
Sprawdź dziennik SSH po stronie serwera
Na serwerze zdalnym zdarzenia uwierzytelniania SSH są rejestrowane w:
# Debian/Ubuntu
tail -f /var/log/auth.log
# CentOS/RHEL/Fedora
tail -f /var/log/secure
# Systems using journald
journalctl -u sshd -fZweryfikuj plik authorized_keys
# Check the file exists and has correct permissions
ls -la ~/.ssh/authorized_keys
# View its contents
cat ~/.ssh/authorized_keys
# Count how many keys are authorized
grep -c "ssh-" ~/.ssh/authorized_keysSSH Key Security Best Practices
Prawidłowe zarządzanie kluczami wykracza poza wiedzę o tym, gdzie przechowywane są pliki. Postępuj zgodnie z tymi praktykami na każdym systemie, którym zarządzasz:
1. Użyj jednego klucza na cel
Nigdy nie używaj ponownie tego samego klucza SSH w różnych środowiskach, dla różnych klientów lub projektów. Używaj oddzielnych kluczy do dostępu osobistego, automatyzacji wdrażania i dostępu wspólnego dla zespołu.
2. Regularnie rotuj klucze
Traktuj klucze SSH jak hasła — rotuj je okresowo, zwłaszcza po odejściu członka zespołu lub podejrzeniu kompromisu.
3. Audit authorized_keys Files
Regularnie przeglądaj, które klucze publiczne są autoryzowane na każdym serwerze. Usuń wszystkie klucze należące do byłych pracowników, przestarzałej automatyzacji lub nieznanych źródeł:
# Find all authorized_keys files on a system
find / -name "authorized_keys" 2>/dev/null4. Wyłącz uwierzytelnianie hasłem
Po skonfigurowaniu kluczy SSH całkowicie wyłącz logowanie SSH oparte na hasłach w /etc/ssh/sshd_config:
PasswordAuthentication no
PubkeyAuthentication yes
PermitRootLogin prohibit-passwordUruchom ponownie sshd po zmianach:
systemctl restart sshd5. Ogranicz użycie klucza root
Unikaj używania kluczy SSH root w wielu środowiskach. Zamiast tego używaj kont użytkowników z włączonym sudo i indywidualnymi kluczami.
6. Użyj uwierzytelniania opartego na certyfikatach do skalowania
W przypadku dużych infrastruktur rozważ certyfikaty SSH (za pośrednictwem SSH Certificate Authority) zamiast zarządzania indywidualnymi wpisami authorized_keys. To drastycznie upraszcza zarządzanie dostępem na wielu serwerach.
Klucze SSH w środowiskach chmurowych i hostingowych
Podczas wdrażania serwerów w środowiskach chmurowych lub hostingu zarządzanego, zarządzanie kluczami SSH staje się jeszcze bardziej krytyczne. Większość platform — w tym dostawcy VPS Hosting — pozwala na wstrzyknięcie klucza publicznego w czasie inicjowania obsługi, dając ci natychmiastowy bezpieczny dostęp bez konieczności ustawiania hasła.
Dla zespołów zarządzających wieloma środowiskami, rozważ połączenie strategii klucza SSH ze strukturalną konfiguracją Paneli Sterowania VPS, która może uprościć zarządzanie użytkownikami i kontrolę dostępu w całej infrastrukturze.
Jeśli uruchamiasz aplikacje internetowe lub usługi wymagające bezpiecznej komunikacji poza SSH, połączenie konfiguracji serwera z prawidłowo skonfigurowanymi Certyfikatami SSL zapewnia szyfrowanie end-to-end dla całego ruchu — nie tylko dostępu administracyjnego.
Dla zespołów, które polegają na Hostingu Poczty Elektronicznej obok infrastruktury serwera, zarządzanie kluczami SSH rozciąga się na zabezpieczanie systemów obsługujących pocztę — kolejny powód, dla którego spójna higiena kluczy na wszystkich serwerach ma znaczenie.
Szybka referencja: Lokalizacje plików kluczy SSH
| Lokalizacja | Typ | Cel |
|---|---|---|
~/.ssh/id_ed25519 | Prywatny klucz użytkownika | Uwierzytelnianie klienta |
~/.ssh/id_ed25519.pub | Publiczny klucz użytkownika | Rozpowszechniany na serwerach |
~/.ssh/authorized_keys | Autoryzowane klucze publiczne | Kontroluje, kto może się zalogować |
~/.ssh/known_hosts | Odciski palców serwera | Zapobiega atakom MITM |
~/.ssh/config | Konfiguracja klienta | Ustawienia dla każdego hosta |
/etc/ssh/ssh_host_* | Klucze hosta | Tożsamość serwera |
/etc/ssh/sshd_config | Konfiguracja demona | Ustawienia serwera SSH |
Podsumowanie
Zrozumienie, gdzie przechowywane są klucze SSH w Linux — i zarządzanie nimi z dyscypliną — jest jedną z najważniejszych umiejętności dla każdego pracującego z serwerami, niezależnie od tego, czy jesteś samodzielnym deweloperem, czy częścią dużego zespołu operacyjnego.
Podsumowanie kluczowych wniosków:
- Klucze użytkownika znajdują się w
~/.ssh/i są używane do uwierzytelniania po stronie klienta - Klucze hosta znajdują się w
/etc/ssh/i identyfikują serwer dla łączących się klientów authorized_keyskontroluje dostęp przychodzący — regularnie go audytuj- Uprawnienia do plików są niezbędne — nieprawidłowe uprawnienia dyskretnie psują SSH
- Ed25519 jest preferowanym typem klucza do generowania nowych kluczy
- Zawsze używaj haseł i
ssh-agentdo codziennego zarządzania kluczami - Rotuj i audytuj klucze w ramach regularnej higieny bezpieczeństwa
W systemach produkcyjnych — niezależnie od tego, czy uruchamiasz Serwery Dedykowane czy infrastrukturę współdzieloną — błędne zarządzanie kluczami SSH jest jednym z najczęstszych wektorów nieautoryzowanego dostępu. Inwestycja czasu w prawidłowe wykonanie tego zadania przynosi korzyści w bezpieczeństwie, niezawodności i spokoju ducha.
Traktuj swoje klucze SSH z taką samą ostrożnością, jaką przydzieliłbyś każdemu krytycznemu poświadczeniu. Ponieważ to dokładnie tym są.
na wszystkich usługach hostingowych