Klucze SSH są wykorzystywane do uwierzytelnienia komunikacji pomiędzy komputerem a serwerem, pomiędzy dwoma serwerami lub do szyfrowania danych. Po ich wygenerowaniu otrzymujemy parę kluczy. Klucz prywatny, którego nikomu nie udostępniamy oraz klucz publiczny, który przesyłamy na serwer. Osoba, która wejdzie w posiadanie klucza prywatnego ma dostęp do wszystkich serwerów na których znajduje się klucz publiczny, który jest powiązany z kluczem prywatnym. Klucz prywatny należy więc traktować z taką samą powagą jak hasło. Klucze bardzo upraszczają cały proces logowania oraz zwiększają bezpieczeństwo, ponieważ przy próbie logowania nie musimy podawać hasła. Klucze generujemy tylko raz, a następnie są one automatycznie zaciągane i porównywane.
Generowanie kluczy
W celu wygenerowania kluczy należy użyć poniższej komendy:
ssh-keygen
Opcjonalnie możemy podać hasło, które zabezpieczy nasz klucz prywatny przed niepożądanymi osobami. Jednak jeśli nie chcemy go podawać możemy kliknąć ENTER
i przejść dalej.
Powyższa komenda wygeneruje nam dwa klucze. Klucz prywatny id_rsa
oraz klucz publiczny id_rsa.pub
. Znajdują się one w folderze ~/.ssh/
(dla windows C:\Users\nazwa_uzytkownika\.ssh
). Należy pamiętać, że wygenerowane klucze są ze sobą powiązane (stanowią parę). Autoryzacja będzie poprawna tylko wtedy kiedy porównamy klucze z tej samej pary.
Wybór algorytmu szyfrowania oraz wielkości kluczy
Dodając do komendy parametr -t
możemy wybrać algorytm szyfrujący.
ssh-keygen -t nazwa_algorytmu
Przykładowo:
ssh-keygen -t dsa
Powyższa komenda wygeneruje nam klucze przy użyciu algorytmu dsa
. Dodatkowo przy użyciu parametru -b
możemy również określić wielkość klucza.
ssh-keygen -b wielkość_w_bitach
Przykładowo:
ssh-keygen -t dsa -b 4096
Nasze klucze zostaną wygenerowane przy użyciu algorytmu dsa
i będą mieć wielkość 4096
bitów. Moim zdaniem domyślne wartości są w zupełności wystarczające i jeśli nie ma potrzeby zmiany algorytmu czy wielkości klucza to nie musimy tego robić.
Wybór nazwy kluczy
Czasami będziemy chcieli określić nazwę kluczy na przykład w celu łatwiejszego rozpoznania do czego ich używamy. Domyślna nazwa to id_rsa
oraz id_rsa.pub
. Aby ustawić własną nazwę należy użyć parametru -f
.
ssh-keygen -f nazwa
Przykładowo:
ssh-keygen -f 1024bits
Wygeneruje nam klucz prywatny o nazwie 1024bits
oraz klucz publiczny 1024bits.pub
.
Kopiowanie klucza publicznego na serwer
Po wygenerowaniu kluczy należy przesłać klucz publiczny na serwer. Umożliwi to późniejszą autoryzację. Warto zaznaczyć, że kluczy możemy również używać w wielu serwisach takich jak na przykład github. Aby skopiować plik na serwer należy użyć poniższej komendy (nie działa na windows) lub dowolnego innego sposobu na przykład kopiowania plików przez ssh:
ssh-copy-id -i ścieżka_do_pliku nazwa_użytkownika@adres_serwera
Należy pamiętać, że klucz publiczny dodajemy tylko dla konkretnego użytkownika. Więc jeśli w przyszłości będziemy chcieli zalogować się na innego użytkownika dla niego również będziemy musieli dodać klucz publiczny. Przykładowa komenda może wyglądać następująco:
ssh-copy-id -i ~/.ssh/id_rsa.pub 1024bits@192.168.0.1
Powyższa komenda skopiuje klucz publiczny id_rsa.pub
do użytkownika 1024bits
na serwerze o adresie 192.168.0.1
. Wywołanie jej spowoduje wysłanie prośby o podanie hasła. Po poprawnej autoryzacji nastąpi przesłanie klucza.
Logowanie
W celu zalogowania się do serwera z wykorzystaniem kluczy ssh wystarczy użyć poniższej komendy:
ssh nazwa_użytkownika@adres_serwera
W naszym przypadku komenda będzie wyglądać następująco:
ssh 1024bits@192.168.0.1
Jeśli zdecydowaliśmy się na podanie hasła przy tworzeniu naszych kluczy to przy każdym logowaniu będziemy zmuszeni do jego wprowadzenia. Aby tego uniknąć możemy posłużyć się narzędziem jakim jest ssh-agent
. Najpierw należy go włączyć za pomocą poniższej komendy:
ssh-agent -s
A następnie dodać do niego nasz klucz prywatny:
ssh-add ścieżka_do_klucza
W naszym przypadku będzie to:
ssh-add ~/.ssh/id_rsa
Po wykonaniu powyższych komend logowanie nie będzie już wymagało podawania hasła do naszego klucza chyba, że zrestartujemy nasz komputer. Jeśli skorzystamy z ssh-agent
należy zwrócić uwagę na to kto ma dostęp do naszej maszyny na której pracujemy. Niepowołane osoby mogą wyrządzić spore szkody na serwerach/serwisach do których jest dodany nasz klucz.
Starsze wersje systemu windows
Trzeba mieć na uwadze, że ssh nie jest dostępne w starszych wersjach systemu windows. Więc aby z niego skorzystać należy użyć narzędzia jakim jest putty.