Skip to content

Klucze SSH - czyli bezpieczy sposób na komunikację z hostingiem

Klucze SSH to narzędzie do bezpiecznego uwierzytelniania. Zamiast korzystać z hasła, używasz pary kluczy: prywatnego (zazwyczaj przechowywanego na twoim komputerze) i publicznego (dodawanego do serwera). Podczas logowania, serwer sprawdza, czy twój publiczny klucz pasuje do prywatnego klucza na twoim komputerze. Klucze są trudniejsze do złamania niż hasła, ponieważ są generowane z dużej ilości losowych danych.

Algorytmy w kluczach SSH

W zależności od rodzaju u biblioteki openSSL

Poniżej lista zawierająca najpopularniejsze algorytmy kluczy SSH:

  • ED25519 - Algorytm oparty na krzywych edwardsa (najnowszy, rekomendowany),
  • ECDSA - Algorytm oparty na krzywych eliptycznych,
  • DSA - Algorytm podpisu cyfrowego,
  • RSA - Algorytm oparty na faktoryzacji liczb całkowitych

Współczesne wersje OpenSSL (na przykład OpenSSL 1.1.1 i nowsze) zazwyczaj obsługują ED25519. Jednak dokładna wersja, która wprowadziła to wsparcie, może się różnić w zależności od dystrybucji systemu operacyjnego lub wersji OpenSSL dostępnej na danym urządzeniu.

Jeśli chcesz mieć pewność, która wersja OpenSSL zawiera wsparcie dla ED25519, zalecam sprawdzenie dokumentacji lub notatek wydania dla konkretnej wersji OpenSSL zainstalowanej na Twoim systemie. Możesz także wywołać polecenie openssl version w terminalu, aby uzyskać informacje o zainstalowanej wersji OpenSSL i sprawdzić dostępność obsługi ED25519.

Generowanie kluczy SSH MacOS/Linux

Aby wygenerować parę kluczy ED25519, otwórz dowolny terminal i użyj poniższej komendy:

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

Podczas uruchomionego kreatora możesz wybrać folder oraz nazwę swojego klucza, możesz postawić domyślne wartości. Program poprosi również o nadanie hasła do twojego klucza. Aby używać klucza bez hasła, wciśnij, a następnie potwierdź klawiszem enter puste hasło. Fraza "[email protected]" to komentarz, który zostanie dodany do twojego klucza. Jest on przydatny kiedy mamy w systemie więcej kluczy, możemy wtedy rozpoznać, do czego ten konkretny jest używany. Najczęściej właśnie dodaje się tam adres email, jednak nie jest to regułą.

Dodawanie klucza SSH do agenta ssh (ssh-agent)

W uruchomionym terminalu wydaj komendę:

bash
$ eval "$(ssh-agent -s)"
> Agent pid 59566

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

W zależności od Twojego środowiska możesz potrzebować, użyć innego polecenia. Na przykład, będzie potrzebny dostępu roota, uruchamiając sudo -s -H przed rozpoczęciem ssh-agenta, lub możesz potrzebować, użyć exec ssh-agent bash lub exec ssh-agent zsh do uruchomienia ssh-agenta. Pamiętaj, aby wysyłać na serwery jedynie swój klucz publiczny, rozpoznasz go po jego nazwie. Klucz publiczny ma rozszerzenie .pub

Konfiguracja SSH w systemie

Jeżeli używasz MacOS w wersji 10.12.2 (Sierra) lub nowszej, w celu poprawnego działania kluczy, musisz dokonać zmian w pliku konfiguracyjnym SSH zarządzającego połączeniami. Generalnie polecam tę metodę wszytskim, którzy korzystają z systemów MacOS lub Linux - znacznie ułatwia to pracę z połączeniami SSH.

Otwórz plik konfiguracyjny ulubionym edytorem: ~/.ssh/config, i dodaj podstawowe informacje o twoim hoście np.:

~/.ssh/config
Host dev
    User admin
    Hostname 265.123.123.123
    IdentityFile ~/.ssh/id_ed-admin
  • Host to skrócona nazwa, jaką będziesz się posługiwał podczas połączeń z konsoli. Warto, aby była ona jednoznaczna, by w przyszłości czegoś nie pomylić
  • User to nazwa użytkownika, jaką będziesz się logował na konto SSH.
  • Hostname to dokładny host, pod jaki masz zamiar się łączyć. Może to być adres IP lub nazwa domenowa.
  • IdentityFile to ścieżka do danego klucza, jakiego masz zamiar używać do tego połączenia.

Po uzupełnieniu możesz używać nazwy hosta do połączeń SSH:

bash
$ ssh dev

Dodawanie kluczy SSH do serwera

Jak dodać klucz publiczny na konto hostingowe dowiesz się z tego poradnika: Logowanie do SSH

Aby dodać taki klucz do swojego VPS, gdzie nie ma panelu zarządzania, musisz dodać go do odpowiedniego pliku.

  1. Zaloguj się w klasyczny sposób na swoje konto,
  2. Otwórz plik ~/.ssh/authorized_keys (jeżeli nie ma takiego pliku, stwórz go),
  3. Wklej ciąg znaków z pliku na twoim lokalnym komputerze, np.: ~/.ssh/id_ed25519,
  4. Zapisz utworzony plik.
  5. Nie zapomnij wyłączyć logowania hasłem na serwerze, zrobisz to w pliku:
/etc/ssh/sshd_config
PasswordAuthentication no

To wszystko, co musisz zrobić, aby logowanie zadziałało.

Najczęstsze problemy

Podczas procesu generowania i dodawania kluczy może dojść do pomyłek. Jeśli próba połączenia nie udaje się, możesz przeczytać na ekranie komunikat sugerujący przyczynę problemu. Jeżeli to, co pojawia się na konsoli nie jest zbyt pomocne możesz dodać jeszcze jeden parametr do połączenia pokazujący cały proces: -vv

bash
$ ssh dev -vv

uzyskasz wtedy szerszy obraz sytuacji.

Uprawnienia plików

Często zdarza się, że tworząc pliki lub foldery zapisywane są one z domyślnymi uprawnieniami. Zaszyte reguły bezpieczeństwa w obsłudze SSH sprawdzają, czy tylko dany użytkownik może odczytywać dane pliki. Nadaj uprawnienia w taki sposób, aby to naprawić:

bash
$ chmod 600 ~/.ssh/config -R
Zła para kluczy

Może się okazać, że na swoim komputerze posiadasz więcej niż jedną parę kluczy. Upewnij się, że używasz dobrego zestawu do logowania.

Nieobsługiwane algorytmy

Starsze systemy mogą mieć problem z obsługą kluczy ED25519 i CDSA. Spróbuj wygenerować klucze typu RSA dla tego rodzaju hosta.

Pomylenie klucza prywatnego z publicznym

Jeżeli na serwerze w pliku konfiguracyjnym twojego profilu SSH widzisz taki ciąg znaków: -----BEGIN OPENSSH PRIVATE KEY----- to znaczy, że wysłałeś na serwer swój klucz prywatny, a nie publiczny.