Skip to content

Klucze SSH — generowanie i konfiguracja

Klucze SSH to narzędzie do bezpiecznego uwierzytelniania bez użycia hasła. Zamiast wpisywać hasło przy każdym logowaniu, używasz pary kluczy: prywatnego (przechowywanego na twoim komputerze) i publicznego (dodawanego do serwera).

Podczas logowania serwer sprawdza, czy twój klucz publiczny pasuje do klucza prywatnego. Klucze są znacznie trudniejsze do złamania niż hasła — generowane są z dużej ilości losowych danych kryptograficznych.

Dostępne algorytmy

AlgorytmPodstawaRekomendacja
ED25519Krzywe EdwardsaZalecany — krótki klucz, wysoka odporność
ECDSAKrzywe eliptyczneDobra alternatywa, szerokie wsparcie
RSAFaktoryzacja liczb całkowitychUżywaj gdy serwer nie obsługuje ED25519 (klucz min. 4096 bitów)
DSAPodpis cyfrowyPrzestarzały — nie używaj

W tym poradniku używamy ED25519. Obsługiwany jest przez OpenSSH 6.5+ (2014), czyli praktycznie wszędzie.


Generowanie kluczy — macOS i Linux

Otwórz terminal i wpisz:

bash
ssh-keygen -t ed25519 -C "[email protected]"

Kreator zapyta o lokalizację pliku (możesz zatwierdzić domyślną klawiszem Enter) oraz hasło do klucza. Hasło jest opcjonalne — jeśli chcesz logować się bez żadnego potwierdzenia, zostaw puste.

Po wygenerowaniu w katalogu ~/.ssh/ znajdziesz dwa pliki:

  • ~/.ssh/id_ed25519 — klucz prywatny (nigdy go nie udostępniaj)
  • ~/.ssh/id_ed25519.pub — klucz publiczny (ten dodajesz na serwery)

Dodawanie klucza do ssh-agent

Jeśli używasz hasła do klucza, ssh-agent zapamiętuje je na czas sesji — nie musisz wpisywać go przy każdym połączeniu.

bash
eval "$(ssh-agent -s)"
ssh-add ~/.ssh/id_ed25519

Na macOS możesz zapisać hasło w Keychain:

bash
ssh-add --apple-use-keychain ~/.ssh/id_ed25519

Konfiguracja pliku ~/.ssh/config

Plik ~/.ssh/config pozwala przypisać skrócone nazwy do połączeń — zamiast podawać pełny adres i użytkownika przy każdym ssh, wpisujesz tylko alias.

Otwórz lub utwórz plik ~/.ssh/config i dodaj wpis:

~/.ssh/config
Host joton
    Hostname twojadomena.pl
    User nazwakonta
    IdentityFile ~/.ssh/id_ed25519
  • Host — alias używany w poleceniu ssh joton
  • Hostname — adres IP lub domena serwera
  • User — nazwa użytkownika SSH
  • IdentityFile — ścieżka do klucza prywatnego

Po skonfigurowaniu logujesz się jednym poleceniem:

bash
ssh joton

Generowanie kluczy — Windows

Windows 10 i Windows 11 mają wbudowany klient OpenSSH. Otwórz PowerShell lub Wiersz polecenia i wpisz:

powershell
ssh-keygen -t ed25519 -C "[email protected]"

Klucze zostaną zapisane w C:\Users\NazwaUzytkownika\.ssh\:

  • id_ed25519 — klucz prywatny
  • id_ed25519.pub — klucz publiczny

💡 Brak polecenia ssh-keygen na Windows?

Jeśli system zgłasza błąd "nie rozpoznano polecenia", zainstaluj OpenSSH: UstawieniaAplikacjeFunkcje opcjonalne → wyszukaj i dodaj Klient OpenSSH.


Dodawanie klucza publicznego na hosting Joton

Klucz publiczny dodajesz w panelu administracyjnym Joton. Szczegółowa instrukcja: Logowanie do SSH.

⚠️ Klucz publiczny, nie prywatny

Na serwer wgrywasz wyłącznie plik z rozszerzeniem .pubid_ed25519.pub. Nigdy nie udostępniaj pliku id_ed25519 (bez rozszerzenia) — to twój klucz prywatny.

Dodawanie klucza do VPS bez panelu

Na VPS lub dedykowanym serwerze bez panelu zarządzania klucz dodajesz ręcznie:

  1. Zaloguj się hasłem na konto SSH.
  2. Otwórz plik ~/.ssh/authorized_keys (jeśli nie istnieje, utwórz go).
  3. Wklej zawartość pliku ~/.ssh/id_ed25519.pub z twojego komputera jako nową linię.
  4. Zapisz plik.

Po dodaniu klucza wyłącz logowanie hasłem — edytuj /etc/ssh/sshd_config:

/etc/ssh/sshd_config
PasswordAuthentication no

Zrestartuj usługę SSH:

bash
systemctl restart sshd

⚠️ Sprawdź połączenie przed wylogowaniem

Przed zamknięciem bieżącej sesji otwórz nowe okno terminala i sprawdź, czy możesz zalogować się kluczem. Jeśli coś poszło nie tak i wylogujesz się wcześniej — stracisz dostęp do serwera.


Najczęstsze problemy

Jeśli połączenie SSH nie działa, uruchom je z flagą -vv aby zobaczyć szczegółowy log negocjacji:

bash
ssh -vv joton
Błąd "Permission denied (publickey)"

Serwer odrzuca klucz. Sprawdź kolejno:

  1. Czy dodałeś klucz publiczny (.pub), a nie prywatny.
  2. Czy plik ~/.ssh/authorized_keys na serwerze ma uprawnienia 600, a katalog ~/.ssh ma 700:
bash
chmod 700 ~/.ssh
chmod 600 ~/.ssh/authorized_keys
  1. Czy w poleceniu ssh lub w ~/.ssh/config wskazujesz właściwy klucz prywatny przez IdentityFile.
Błąd "Bad permissions" lub SSH ignoruje klucz

SSH wymaga ścisłych uprawnień na plikach konfiguracyjnych. Nadaj właściwe uprawnienia:

bash
chmod 600 ~/.ssh/id_ed25519
chmod 600 ~/.ssh/config
Mam kilka kluczy i SSH używa niewłaściwego

Gdy masz kilka kluczy, SSH może próbować ich w niepożądanej kolejności. Wskaż klucz jawnie:

bash
ssh -i ~/.ssh/id_ed25519 user@host

Lub dodaj IdentityFile do wpisu w ~/.ssh/config.

Serwer nie obsługuje ED25519

Starsze systemy (np. CentOS 6, bardzo stary Debian) mogą nie obsługiwać ED25519. Wygeneruj klucz RSA z długością 4096 bitów:

bash
ssh-keygen -t rsa -b 4096 -C "[email protected]"
Pomylenie klucza prywatnego z publicznym

Jeśli na serwerze w pliku authorized_keys widzisz linię zaczynającą się od -----BEGIN OPENSSH PRIVATE KEY----- — wgrałeś klucz prywatny zamiast publicznego. Usuń tę linię i wklej zawartość pliku id_ed25519.pub.


Przydatne linki