Menu
Szybki wybór
Hosting Domeny VPS SSL Kalkulator Porównania FAQ
Aktywne kody
Wszystkie kody rabatowe

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:

  1. Lokalizacja pliku — domyślnie ~/.ssh/id_ed25519 (naciśnij Enter)
  2. 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...")
  1. GitHub: Settings → SSH and GPG keys → New SSH key → wklej klucz publiczny
  2. 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