SSH keys — konfiguracja kluczy SSH na VPS i GitHub
Dlaczego klucze SSH zamiast hasła?
Logowanie hasłem do serwera naraża go na ataki brute-force — boty stale skanują port 22 i próbują popularnych haseł. Klucz SSH to para kryptograficzna: klucz prywatny (tylko u ciebie) i klucz publiczny (na serwerze). Bez klucza prywatnego nikt nie zaloguje się na konto, nawet znając hasło — bo po skonfigurowaniu kluczy można wyłączyć logowanie hasłem.
Powiązane tematy: UFW firewall na VPS, SFTP vs FTP, Git deploy na hosting oraz Docker na VPS. Porównaj oferty VPS na kalkulatorze kosztów.
Ed25519 czy RSA? Który algorytm wybrać?
| Algorytm | Długość klucza | Bezpieczeństwo | Kompatybilność |
|---|---|---|---|
| Ed25519 | 256 bitów (EdDSA) | Bardzo wysokie | OpenSSH 6.5+ (2014) |
| RSA 4096 | 4096 bitów | Wysokie | Wszystkie systemy |
| RSA 2048 | 2048 bitów | Akceptowalne do 2030 | Wszystkie systemy |
| ECDSA | 256/384/521 bitów | Dobre | Szerokie wsparcie |
Rekomendacja: Ed25519 — krótki, szybki, bezpieczny. Używaj RSA 4096 tylko jeśli łączysz się ze starymi systemami (np. CentOS 6, stare routery).
Generowanie klucza SSH
# Ed25519 (zalecany)
ssh-keygen -t ed25519 -C "[email protected]"
# RSA 4096 (alternatywa dla starszych systemów)
ssh-keygen -t rsa -b 4096 -C "[email protected]" Polecenie zapyta o:
- Lokalizacja pliku — domyślnie
~/.ssh/id_ed25519(naciśnij Enter) - Hasło (passphrase) — zalecane! Chroni klucz prywatny jeśli plik zostanie skradziony
Powstaną dwa pliki:
~/.ssh/id_ed25519— klucz prywatny (NIGDY nie udostępniaj)~/.ssh/id_ed25519.pub— klucz publiczny (kopiujesz na serwery)
# Wyświetl klucz publiczny do skopiowania
cat ~/.ssh/id_ed25519.pub Dodanie klucza do serwera VPS
Metoda 1 — ssh-copy-id (najprostsza)
# Pierwsza konfiguracja — musisz znać hasło root
ssh-copy-id -i ~/.ssh/id_ed25519.pub root@adres-serwera
# Lub dla konkretnego portu
ssh-copy-id -i ~/.ssh/id_ed25519.pub -p 2222 root@adres-serwera Metoda 2 — ręcznie przez SSH
ssh root@adres-serwera
mkdir -p ~/.ssh
echo "TUTAJ_WKLEJ_KLUCZ_PUBLICZNY" >> ~/.ssh/authorized_keys
chmod 700 ~/.ssh
chmod 600 ~/.ssh/authorized_keys Metoda 3 — panel hostingowy
Większość dostawców VPS (Hetzner, OVH, Contabo) pozwala dodać klucz SSH podczas tworzenia serwera w panelu — klucz jest automatycznie instalowany dla root.
Wyłączenie logowania hasłem (po instalacji klucza)
Dopiero po potwierdzeniu że logowanie kluczem działa — edytuj /etc/ssh/sshd_config:
sudo nano /etc/ssh/sshd_config
# Zmień lub dodaj te linie:
PasswordAuthentication no
ChallengeResponseAuthentication no
UsePAM no
PermitRootLogin prohibit-password # lub 'no' jeśli masz sudo user
# Zapisz i zrestartuj SSH
sudo systemctl restart sshd Uwaga: Nie zamykaj aktualnej sesji SSH przed sprawdzeniem czy nowe połączenie działa. Miej otwarte dwa okna terminala.
Konfiguracja wielu kluczy — ~/.ssh/config
Plik ~/.ssh/config pozwala przypisać różne klucze do różnych serwerów i używać krótkich
aliasów:
# Serwer produkcyjny
Host prod
HostName 192.168.1.100
User root
IdentityFile ~/.ssh/id_ed25519_prod
Port 22
# Serwer staging
Host staging
HostName staging.example.com
User deploy
IdentityFile ~/.ssh/id_ed25519_staging
# GitHub
Host github.com
HostName github.com
User git
IdentityFile ~/.ssh/id_ed25519_github
# Prywatne repozytorium GitLab
Host gitlab-private
HostName gitlab.com
User git
IdentityFile ~/.ssh/id_ed25519_work Teraz możesz się logować przez alias:
ssh prod # zamiast: ssh -i ~/.ssh/id_ed25519_prod [email protected]
ssh staging # zamiast: ssh -i ~/.ssh/... [email protected]
git clone git@gitlab-private:firma/repo.git # użyje klucza work Dodanie klucza do GitHub/GitLab
# Wyświetl klucz publiczny
cat ~/.ssh/id_ed25519.pub
# Skopiuj wynik (zaczyna się od "ssh-ed25519 AAAA...") - GitHub: Settings → SSH and GPG keys → New SSH key → wklej klucz publiczny
- GitLab: User Settings → SSH Keys → wklej klucz publiczny
# Test połączenia z GitHub
ssh -T [email protected]
# Oczekiwane: Hi username! You've successfully authenticated... ssh-agent — zarządzanie kluczami z passphrase
Jeśli klucz ma hasło, ssh-agent przechowuje odblokowany klucz w pamięci na czas sesji:
# Uruchom agenta (zwykle automatyczny w Linux/Mac)
eval "$(ssh-agent -s)"
# Dodaj klucz (podasz passphrase raz)
ssh-add ~/.ssh/id_ed25519
# Lista załadowanych kluczy
ssh-add -l
# Na macOS — przechowaj passphrase w Keychain
ssh-add --apple-use-keychain ~/.ssh/id_ed25519 Na Windows — użyj PowerShell i usługi ssh-agent lub PuTTY Pageant.
Bezpieczeństwo — dobre praktyki
- Jeden klucz per urządzenie — jeśli laptop zostanie skradziony, usuwasz tylko ten klucz z serwerów
- Zawsze passphrase na kluczach produkcyjnych
- Rotacja kluczy co rok — generuj nowy, dodaj na serwery, usuń stary
- Przechowuj klucz prywatny tylko lokalnie — nie kopiuj do chmury (Dropbox, GitHub, email)
- Uprawnienia plików:
chmod 600 ~/.ssh/id_*,chmod 700 ~/.ssh/ - Sprawdzaj authorized_keys regularnie — usuń klucze nieużywanych pracowników