Dotychczas sam logowałem się do swojego serwera poprzez SSH z wykorzystaniem zwykłego hasła. Parę dni temu w związku z jednym zleceniem zainteresowałem się kluczami SSH, dzięki którym można również uzyskać dostęp do SSH1. Zaleta jest taka, że nie musimy każdorazowo wpisywać hasła. Właściwie… w przypadku kluczy niezabezpieczonych hasłem (tzw. passphrase) nie musimy w ogóle podawać hasła. Wystarczy wskazać ścieżkę do klucza w programie, za pomocą którego łączymy się do naszego serwera (PuTTY, WinSCP, Filezilla, Total Commander…).
Zaletą SSH jest fakt, że możemy zdefiniować sposób dostępu do naszego serwera za pośrednictwem hasła, klucza, czy też za pomocą protokołu Kerberos (który jest mi na chwilę obecną obcy). Możemy również dla użytkownika root zabronić dostępu za pośrednictwem hasła. Dzięki czemu będzie możliwe zalogowanie się na to konto jedynie za pomocą klucza, lub protokołu Kerberos. Dziś jednak skupimy się tylko i wyłącznie na kluczach i ich generowaniu za pomocą PuTTY 3.
Co będzie potrzebne
Do poprawnego wygenerowania klucza, oraz późniejszego poprawnego funkcjonowania będziemy potrzebować następujących programów:
Żaden z programów nie wymaga instalacji.
Generowanie klucza
Pierwszą rzeczą4, którą musimy zrobić jest wygenerowanie klucza za pomocą PuTTYgen.
- Uruchamiamy program;
- W dolnym polu „Number of bits in a generated key” możemy zdefiniować liczbę bitów w wygenerowanym kluczu (np. 1024, 2048, 4096). W sieci znalazłem informację iż wartość 1024 dobra jest dla tymczasowych kluczy, 2048 dla kluczy na rok, a 4096 na dłużej. Nawet na 5 lat… Wg mnie kwestia sporna, sam jednak podałem wartość 4096;
- Następnie klikając na Generate zaczynamy generowanie klucza. W tym celu musimy poruszać kursorem myszki po pustym, szarym polu – do momentu, aż klucz zostanie wygenerowany.

Po poprawnym wygenerowaniu klucza ujrzymy okno z nowo wygenerowanym kluczem i trzema polami, w które możemy wpisać tekst.

Pierwszym z nich jest Key comment – w polu tym wpisujemy komentarz do nowo wygenerowanego klucza. Może to być nasz adres e-mail, lub adres naszej strony, albo login. Dzięki temu możemy w prosty sposób zidentyfikować nasz klucz na liście w Pageant oraz na serwerze w pliku z kluczami (opis później).
Pozostałe dwa pola dotyczą wygenerowanej frazy/hasła (tzw. passphrase). W jednym i drugim polu musimy wpisać to samo hasło, dzięki któremu później możemy zdekodować klucz.
Gdy zakończymy uzupełnianie danych klucza o te dane, możemy go zapisać. W tym celu klikamy na przycisk Save private key. Wybieramy lokalizację, w której chcemy zapisać plik i podajemy jego nazwę. Ja zrobię to w: D:\klucz.ppk
Dodanie klucza na nasz serwer
Pozostały nam teraz ostatnie rzeczy do zrobienia, by za pomocą klucza móc się zalogować do naszego serwera SSH. Musimy dodać wygenerowany klucz do odpowiedniego pliku na naszym serwerze, oraz podać ścieżkę do klucza w programie PuTTY.
Logujemy się na nasz serwer SSH za pomocą hasła, czyli tak, jak zwykle. Z programu PuTTYgen kopiujemy klucz z szarego pola (wcześniej ruszaliśmy tam myszką).
Pozostaje nam teraz tylko dodać klucz do pliku ~/.ssh/authorized_keys. Wykonujemy więc następujące polecenia:
#przechodzimy do folderu .ssh naszego użytkownika. Dla roota będzie to /root/.ssh, dla użytkownika zwykłego /home/user/.ssh cd ~/.ssh/ #dodajemy zdefiniowany klucz do pliku authorized_keys echo tutaj_wklej_klucz_ssh-rsa.... >>authorized_keys
Ostatnią rzeczą do zrobienia jest wskazanie PuTTY lokalizacji naszego klucza, za pomocą którego będziemy mogli się teraz zalogować na nasz serwer. Uruchamiamy więc program PuTTY, ładujemy sesję do połączenia z naszym serwerem i przechodzimy do zakładki Connection / SSH / Auth. W polu na samym dole podajemy ścieżkę do utworzonego przez nas klucza prywatnego.

Wracamy następnie do sesji (Session) i klikając na sesję naszego serwera klikamy na Save. Dzięki temu nie będziemy musieli ponownie definiować ścieżki klucza – konfiguracja zostanie zapamiętana.

Logujemy się do naszego serwera, ale podczas łączenia serwer/program prosi nas o passphrase – chcemy uniknąć podawania tego hasła każdorazowo. Do tego celu wykorzystamy program Pageant.
Dodawanie klucza do Pageant
Uruchamiamy wcześniej pobrany program Pageant. Domyślnie program załaduje się do traya. Klikamy dwukrotnie na jego ikonkę, w celu przywołania okna programu. Widzimy tam dwa przyciski:
- Add Key;
- Remove Key.
Interesuje nas ten pierwszy przycisk. Klikamy więc na niego w celu dodania klucza do programu. Program zapyta nas o hasło (passphrase). Po zatwierdzeniu wygenerowany przez nas klucz zostanie dodany do listy.

Od tej chwili, gdy uruchomimy PuTTY w celu zalogowania się na naszym serwerze nie będziemy musieli podawać każdorazowo hasła. Pageant zapamiętał passphrase i będzie ją trzymał do momentu, gdy wyłączymy program, lub się wylogujemy (co jest równoznaczne z zakończeniem programu).

By maksymalnie uprościć ładowanie klucza do programu Pageant możemy utworzyć skrót do niego, tak by automatycznie ładował klucz na listę. By tego dokonać tworzymy standardowy skrót do programu (prawoklik / Nowy / Skrót). Po utworzeniu skrótu do programu klikamy prawym przyciskiem myszy i wybieramy Właściwości. W polu Element docelowy podajemy ścieżkę do programu oraz do naszego klucza, które oddzielamy spacją. Dla przykładu:

- D:\pageant.exe D:\klucz.ppk
- ″D:\folder ze spacja\w nazwie\pageant.exe″ ″D:\lokalizacja klucza\klucz.ppk″
Zabronienie logowania za pomocą hasła
Możemy skonfigurować nasz serwer SSH tak, by użytkownik root nie mógł zalogować się na serwer za pomocą hasła, tylko z użyciem klucza. Do tego celu potrzebujemy zmodyfikować plik /etc/ssh/sshd_config. Interesuje nas linia:
#PermitRootLogin yes
Pierwszą rzeczą, którą musimy zrobić jest usunięcie hasha (#) i zastąpienie frazy „yes” frazą „without-password”. Linia ta powinna wyglądać zatem następująco:
PermitRootLogin without-password
Zapisujemy plik i restartujemy serwer SSH:
#dla CentOS zadziała polecenie service sshd restart #dla innych systemów konieczne może być wydanie polecenia /etc/init.d/sshd restart
Od tej pory będziemy mogli zalogować się na użytkownika root jedynie za pomocą utworzonego przez nas klucza.
Na zakończenie
By nauczyć się generowania klucza i sposobu jego wykorzystania wykorzystałem stronę http://www.howtoforge.com/ssh_key_based_logins_putty oraz przydały mi się informacje z manuala sshd_config. Wpis jednak został od podstaw napisany przeze mnie, zrzuty są również mojego autorstwa. Zrobiłem to dlatego, by mi się to utrwaliło w pamięci.
Ikona wpisu pochodzi z programu PuTTYgen, którego właścicielem są ci Panowie.
- Chodzi o to, że można uzyskać dostęp do serwera z wykorzystaniem samego klucza, bez podawania hasła użytkownika. [↩]
- Załadowany klucz jest ważny podczas jednej sesji. Po wylogowaniu się musimy ponownie wpisać hasło dla klucza. [↩]
- Samo PuTTY nie daje możliwości generowania kluczy. Do tego celu są osobne narzędzia dostarczane przez autora programu. [↩]
- Oczywiście z góry zakładam, że PuTTY mamy skonfigurowane odpowiednio i bez problemu możemy zalogować się na naszym serwerze przez SSH, a nasza sesja jest zapisana. [↩]
Dodaj komentarz