 Autor: [Adam Nadolny](/autorzy/adam-nadolny) Ekspert DevOps i infrastruktury · Zweryfikowano Kwiecień 2026

1.  [HostGrade.pl](/)
2.  [Baza wiedzy](/baza-wiedzy)
3.  SSH keys — konfiguracja na VPS

# SSH keys — konfiguracja kluczy SSH na VPS i GitHub

Kategoria: [Serwer VPS](/baza-wiedzy) · Aktualizacja: Kwiecień 2026

## 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](/baza-wiedzy/ufw-firewall-konfiguracja-vps), [SFTP vs FTP](/baza-wiedzy/ftp-sftp-roznice-konfiguracja), [Git deploy na hosting](/baza-wiedzy/git-deploy-hosting) oraz [Docker na VPS](/baza-wiedzy/docker-na-vps). Porównaj oferty VPS na [kalkulatorze kosztów](/kalkulator).

## 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 "twoj@email.com"

# RSA 4096 (alternatywa dla starszych systemów)
ssh-keygen -t rsa -b 4096 -C "twoj@email.com"
```

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 root@192.168.1.100
ssh staging       # zamiast: ssh -i ~/.ssh/... deploy@staging.example.com
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 git@github.com
# 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

## Powiązane strony

-   [UFW firewall — konfiguracja na VPS](/baza-wiedzy/ufw-firewall-konfiguracja-vps)
-   [FTP vs SFTP — różnice i konfiguracja](/baza-wiedzy/ftp-sftp-roznice-konfiguracja)
-   [Git deploy na hosting](/baza-wiedzy/git-deploy-hosting)
-   [Docker na VPS — instalacja i konfiguracja](/baza-wiedzy/docker-na-vps)
-   [Porównanie serwerów VPS](/vps)