Klucze SSH - podstawowy poradnik

Poradniki
vps, ssh, link-w-panelu
bopke
bopke Moderator forum.lvlup.pro

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:

image|479x471

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:

image|479x471

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.

image|452x442

Teraz przechodzimy do zakładki Connection->SSH->Auth

image|452x442

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.

image|452x442

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.

image|515x355

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).

SystemZ
SystemZ Admin lvlup.pro

Od jakiegoś czasu w Windows 10 jest możliwa instalacja środowiska np. Ubuntu. Wtedy używając tego środowiska kroki wyglądają w zasadzie identycznie co na linuksie. Można też dodać mały fragment o tym, ewentualnie podzielić poradnik na każdą platformę o ile będzie Ci tak wygodnie.

bopke
bopke Moderator forum.lvlup.pro

Poradnik jest podstawowy, skierowany do osób zielonych w tym temacie, mogę taką treść dopisać, ale gdy tworzyłem go, to w zamyśle miałem jak najmniejszą linię oporu, żeby każdy był w stanie po prostu wykonać te kilka prostych kroków do wymarzonego płaskiego brzucha, bez gmatwania, a środowisko ubuntu na windows 10 raczej nie jest skierowane do zupełnie zielonych ludzi :P

SystemZ
SystemZ Admin lvlup.pro

Zależy od punktu widzenia. Łatwiej postawić linuxa albo zalogować się przez SSH czy kliknąć instalkę z Windows Store ? :slight_smile: Kroki te same które już opisałeś więc twierdzisz że Twoja treść jest skomplikowana ? 😉

Lethal
Lethal

Warto dodać, że po upewnieniu się, iż wszystko działa poprawnie, można wyłączyć logowanie na konto root normalnym hasłem. Bez blokowania tego można logować się kluczem jak i starym hasłem. Żeby tego dokonać należy w sshd_config zmienić linijkę Permitrootlogin yes na Permitrootlogin without-password

Sevor
Sevor

@Lethal a jaki jest wtedy ten klucz ?

KutiF
KutiF

Poradnik powyżej pokazuje jak utworzyć ten klucz :thinksmart:

krfcm
krfcm Pionier

@bopke możesz dodać nadanie praw dla authorized_keys, bez tego przynajmniej mi nie chciała logować kluczem

chmod 600 ~/.ssh/authorized_keys

bopke
bopke Moderator forum.lvlup.pro

Dzięki, dodane! :)

lukszar
lukszar

W artykule sekcja dla Mac OS X nie doczekała się jeszcze treści, stąd polecam artykuł o tym traktujący: https://macuser.info/wszystko-co-musisz-wiedziec-o-kluczach-ssh/

Obejmuje takie zagadnienia jak tworzenie kluczy, dodanie w systemie oraz wykorzystanie. Podstawy podstaw opisane przystępnym językiem.

bopke
bopke Moderator forum.lvlup.pro

Po jakże długim czasie doczekałem się maca aby uzupełnić o niego treść poradnika 😁