Klucze SSH
SSH to jeden z najważniejszych protokołów z których korzystamy, gdy chcemy coś zrobić na naszym serwerze. Zapewnia on nam bezpieczne, szyfrowane połączenie z serwerem. Ma on jednak jedną słabość, jaką jest, w domyślnym przypadku, konieczność wpisania hasła. Dobre hasło powinno być długie i złożone, niestety przez to często staje się ono trudne do zapamiętania, łatwo jest je zapomnieć, a zapisywanie go np na kartce nie jest najrozsądniejszym pomysłem. W efekcie spora część użytkowników korzysta z krótkich, nieskomplikowanych haseł, których złamanie jest względnie proste. Rozwiązaniem takiego problemu może okazać się zastosowanie kluczy SSH - skomplikowanych "podpisów", których można użyć zamiast hasła - ich złamanie jest znacznie trudniejsze, a samo stosowanie bezpieczniejsze niż wystukiwanie każdorazowo hasła na klawiaturze. Niestety, ale tworzenie i korzystanie z takich kluczy jest nieco trudniejsze niż z klasycznych haseł. W tym poradniku postaram się przybliżyć, jak należy z nich korzystać, aby ułatwić sobie pracę i zwiększyć poziom bezpieczeństwa Twojego serwera.
Generowanie klucza
Klucze należy wygenerować po stronie klienta, tj. np na komputerze, z którego zamierzamy się logować.
Windows
W wypadku systemów Microsoftu, musimy skorzystać z zewnętrznego programu do wygenerowania naszych kluczy. Jeżeli korzystamy z PuTTy do łączenia się z naszym serwerem poprzez SSH, to razem z nim powinien nam się zainstalować program PuTTygen. Jeżeli jednak go nie ma, to możemy go pobrać z linku ze strony producenta: https://the.earth.li/~sgtatham/putty/latest/w64/puttygen.exe
Po uruchomieniu, okno programu powinno wyglądać następująco:
Aby utworzyć odpowiedni klucz, upewnijmy się że w sekcji Parameters
mamy wybrany typ RSA, a liczbę bitów najlepiej zostawić z wartością domyślną. Gdy będziemy już pewni, że wszystko jest dobrze skonfigurowane, klikamy guzik Generate
i wykonujemy polecenia programu. Gdy nasz klucz zostanie wygenerowany, powinniśmy zobaczyć mniej więcej taki widok:
Teraz możemy założyć hasło na nasz klucz, żeby dodatkowo lepiej go chronić, lub zostawić puste pole Key passphrase
. Pozostawienie pustego pola pozwoli nam później logować się bez podawania hasła, natomiast
Teraz zostało nam już tylko zapisać klucz prywatny za pomocą przycisku Save private key
, a klucz publiczny skopiujmy z pola Public key for pasting into OpenSSH authorized_keys file
i narazie wklejmy sobie w jakimś miejscu, w którym na pewno nam nie zniknie. Gdy już upewnimy się, że zapisaliśmy oba klucze, możemy zamknąć program.
Skoro mamy już klucze, to teraz klucz prywatny należy skonfigurować w PuTTy, aby ten łączył się z serwerem za jego pomocą. W tym celu musimy otworzyć PuTTy i przejść do sekcji Connection->Data
Tutaj, w polu Auto-login username
wpisujemy nazwę użytkownika, na którego chcemy się logować naszym nowym kluczem.
Teraz przechodzimy do zakładki Connection->SSH->Auth
W sekcji Authentication parameters
klikamy przycisk Browse...
i odszukujemy nasz wcześniej zapisany klucz prywatny. Wybieramy go i wracamy do sekcji Session
, a tam wpisujemy adres IP naszego serwera i port połączenia SSH. Kiedy wszystko wypełnimy, to w sekcji Load, save or delete a stored session
wpisujemy nazwę dla naszego połączenia i klikamy Save
. Od teraz nasze połączenie jest dodane do listy zapisanych połączeń i żeby połączyć się z serwerem.
Teraz możemy przejść do następnej części poradnika, w której klucz publiczny zainstalujemy na serwerze :)
Linux i MacOS
W wypadku systemów unixowych i MacOS posłużymy się konsolą, aby wygenerować potrzebne nam klucze. W systemie MacOS ssh jest zaistalowane od początku, w wypadku linuxa zapewne już wcześniej łączyliśmy się z naszym serwerem z konsoli, więc pakiet ssh
powinniśmy mieć zainstalowany, ale możemy się upewnić za pomocą (wypadku systemów z rodziny debiana, m.in. ubuntu) polecenia apt install ssh
.
Kiedy jesteśmy już pewni, że pakiet mamy zainstalowany, możemy wykonać polecenie ssh-keygen -t rsa
, a potem podawać dane zgodnie z informacjami na ekranie - nazwę pliku do którego zapiszemy nasz klucz (jeżeli zamierzamy używać tylko jednego klucza to możemy zostawić domyślną wartość), a który na pewno powinien być w katalogu .ssh
w katalogu domowym użytkownika, a potem hasła do naszego nowego klucza.
w przykładzie zostawiłem domyślną nazwę pliku z kluczem. Do następnej części poradnika potrzebny będzie nam klucz publiczny, który właśnie wygenerowaliśmy, więc o ile nie zmienialiśmy jego nazwy to możemy go sobie wypisać na ekran poleceniem cat ~/.ssh/id_rsa.pub
, a potem go skopiować do schowka, potem się przyda.
Instalowanie klucza na serwerze
Teraz, gdy na naszym komputerze mamy zainstalowany klucz prywatny, zostało nam zainstalować klucz publiczny na serwerze. W tym celu przygotowywujemy pole pod nasz klucz na serwerze poleceniami:
mkdir -p ~/.ssh
chmod 700 ~/.ssh
a potem otwieramy tam plik naszym wybranym edytorem (w moim wypadku będzie to nano) ~/.ssh/authorized_keys
nano ~/.ssh/authorized_keys
Wklejamy tam nasz wcześniej przygotowany klucz publiczny.
Teraz, dla pewności, ustawiamy odpowiednie uprawnienia dla tego pliku:
chmod 600 ~/.ssh/authorized_keys
Musimy już tylko upewnić się, że logowanie kluczami w takiej domyślnej lokalizacji jest włączone. w tym celu otwieramy plik /etc/ssh/sshd_config
nano /etc/ssh/sshd_config
zjeżdżamy do linijki około 37, powinniśmy zobaczyć tam opcje PubkeyAuthentication
i AuthorizedKesyFile
. Jeżeli którakolwiek z opcji jest zakomentowana (znak #
na początku linii), to odkomentujmy ją. Potem, jeżeli będzie potrzeba, zedytujmy je, żeby uzyskać następujący efekt:
PubkeyAuthentication yes
AuthorizedKeysFile .ssh/authorized_keys .ssh/authorized_keys2
Gotowe! Teraz dla pewności możemy zrestartować nasz serwer SSH np poleceniem sudo systemctl restart ssh
i od teraz możemy cieszyć się jeszcze wyższym poziomem bezpieczeństwa serwera, a także logowaniem bez hasła (jeżeli nie podaliśmy hasła przy tworzeniu klucza), lub z hasłem, ale posiadającym nową warstwę zabezpieczeń (klucz SSH).