Zaoszczędź 15% na wszystkich usługach hostingowych

Sprawdź swoje umiejętności i zdobądź Rabat na dowolny plan hostingowy

Użyj kodu: Skills Rozpocznij
Sekcja
Administracja DNS Linux

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/

PlikCel
id_rsaDomyślny klucz prywatny RSA
id_rsa.pubPasujący klucz publiczny RSA
id_ecdsaKlucz prywatny ECDSA
id_ed25519Klucz prywatny Ed25519 (rekomendowany)
id_*.pubOdpowiednik klucza publicznego dla dowolnego klucza prywatnego
authorized_keysLista kluczy publicznych uprawnionych do logowania się na to konto
known_hostsOdciski palców wcześniej połączonych serwerów
configKonfiguracja 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/

PlikCel
ssh_host_rsa_keyPrywatny klucz hosta RSA
ssh_host_rsa_key.pubPubliczny klucz hosta RSA
ssh_host_ecdsa_keyPrywatny klucz hosta ECDSA
ssh_host_ecdsa_key.pubPubliczny klucz hosta ECDSA
ssh_host_ed25519_keyPrywatny klucz hosta Ed25519
ssh_host_ed25519_key.pubPubliczny 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@host

Uż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_key

Dzię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łoki
  • scp — bezpieczne kopiowanie plików
  • rsync — synchronizacja plików przez SSH
  • git — 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_keys

Ten 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/config

Tabela referencyjna uprawnień

ŚcieżkaWymagane uprawnienieOktalnie
~/.ssh/Tylko odczyt/zapis/wykonanie właściciela700
~/.ssh/authorized_keysTylko odczyt/zapis właściciela600
~/.ssh/id_rsa (klucz prywatny)Tylko odczyt/zapis właściciela600
~/.ssh/id_rsa.pub (klucz publiczny)Odczyt właściciela, odczyt innych644
~/.ssh/configTylko odczyt/zapis właściciela600

Aby naprawić uprawnienia w jednym poleceniu:

chmod 700 ~/.ssh && chmod 600 ~/.ssh/* && chmod 644 ~/.ssh/*.pub

Bezpieczne 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_ed25519

Zostaniesz 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 -D

Kopiowanie 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-host

To 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@host

Aby uzyskać jeszcze więcej szczegółów:

ssh -vvv user@host

To 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 -f

Zweryfikuj 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_keys

SSH 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/null

4. 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-password

Uruchom ponownie sshd po zmianach:

systemctl restart sshd

5. 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

LokalizacjaTypCel
~/.ssh/id_ed25519Prywatny klucz użytkownikaUwierzytelnianie klienta
~/.ssh/id_ed25519.pubPubliczny klucz użytkownikaRozpowszechniany na serwerach
~/.ssh/authorized_keysAutoryzowane klucze publiczneKontroluje, kto może się zalogować
~/.ssh/known_hostsOdciski palców serweraZapobiega atakom MITM
~/.ssh/configKonfiguracja klientaUstawienia dla każdego hosta
/etc/ssh/ssh_host_*Klucze hostaTożsamość serwera
/etc/ssh/sshd_configKonfiguracja demonaUstawienia 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_keys kontroluje 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-agent do 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ą.