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:
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ę:
$ 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.:
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:
$ 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.
- Zaloguj się w klasyczny sposób na swoje konto,
- Otwórz plik
~/.ssh/authorized_keys
(jeżeli nie ma takiego pliku, stwórz go), - Wklej ciąg znaków z pliku na twoim lokalnym komputerze, np.:
~/.ssh/id_ed25519
, - Zapisz utworzony plik.
- Nie zapomnij wyłączyć logowania hasłem na serwerze, zrobisz to w pliku:
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
$ 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ć:
$ 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.