Jak skonfigurować klucze SSH w systemie Ubuntu 16.04

Wstęp

SSH, znany również jako Secure Shell, to szyfrowany protokół, zazwyczaj używany do administrowania serwerami i komunikacji z nimi. Podczas pracy z serwerem Ubuntu. W tym samouczku skupimy się na konfiguracji kluczy SSH dla Ubuntu 16.04. Klucze SSH są zalecane dla wszystkich użytkowników i zapewniają łatwy i bezpieczny sposób logowania się do serwera.

Krok 1 — Utwórz parę kluczy RSA

Pierwszym krokiem w konfiguracji kluczy SSH jest utworzenie pary kluczy na komputerze klienckim (zazwyczaj na komputerze stacjonarnym):


$ ssh-keygen

Na początek ssh-keygen utworzy parę 2048-bitowych kluczy RSA, co powinno zapewnić bezpieczeństwo w większości przypadków.

Alternatywnie możesz opcjonalnie przekazać flagę -b 4096, aby utworzyć większy klucz 4096-bitowy

Po wprowadzeniu polecenia powinieneś zobaczyć następujący monit:


Output

Enter file in which to save the key (/your_home/.ssh/id_rsa):

Naciśnij klawisz Enter, aby zapisać parę kluczy w podkatalogu .ssh/ w Twoim katalogu domowym lub w innej, niestandardowej ścieżce.
Powinien pojawić się następujący monit:


Output

Enter passphrase ( leave empty for no passphrase):

Opcjonalnie możesz wprowadzić bezpieczne hasło, co jest zdecydowanie zalecane. Hasło dodaje dodatkową warstwę zabezpieczeń, uniemożliwiając zalogowanie się nieautoryzowanym użytkownikom. Aby dowiedzieć się więcej o bezpieczeństwie, zapoznaj się z naszym poradnikiem „Jak skonfigurować uwierzytelnianie oparte na kluczu SSH na serwerze Linux”.

Następnie powinieneś zobaczyć następujący wynik:

Output

Your identification has been saved in /your_home/.ssh/id_rsa.
Your public key has been saved in /your_home/.ssh/id_rsa.pub.
The key fingerprint is:
a9:49:2e:2a:5e:33:3e:a9:de:4e:77:11:58:b6:90:26 username@remote_host
The key's randomart image is:
+--[ RSA 2048]----+
| ..o |
| E o= . |
| o. o |
| .. |
| ..S |
| o o. |
| =o.+. |
|. =++.. |
|o=++. |
+-----------------+

Powinieneś teraz mieć klucz publiczny i prywatny, których możesz użyć do uwierzytelnienia. Następnym krokiem jest umieszczenie klucza publicznego na serwerze, aby móc zalogować się za pomocą uwierzytelniania opartego na kluczu SSH.


Krok 2 — Kopiowanie klucza publicznego na serwer Ubuntu


Najszybszym sposobem skopiowania klucza publicznego na hosta Ubuntu jest użycie narzędzia o nazwie ssh-copy-id. Ta metoda jest zdecydowanie zalecana, jeśli jest dostępna. Jeśli nie masz narzędzia ssh-copy-id na komputerze klienckim, możesz skorzystać z jednej z dwóch alternatywnych metod opisanych w tej sekcji (skopiowanie przez SSH z hasłem lub ręczne skopiowanie klucza).


Kopiowanie klucza publicznego za pomocą ssh-copy-id


Narzędzie ssh-copy-id jest domyślnie dołączone do wielu systemów operacyjnych, możesz je mieć dostępne w swoim systemie lokalnym. Aby działało, musisz mieć dostęp SSH do swojego serwera zabezpieczony hasłem.
Aby skorzystać z tego narzędzia, wystarczy określić host zdalny, z którym chcesz się połączyć, i dodać konto użytkownika, do którego masz dostęp SSH z hasłem. To właśnie na to konto zostanie skopiowany Twój klucz publiczny SSH.


Składnia jest następująca:


$ ssh-copy-id username@remote_host

Możesz zobaczyć następujący komunikat:


Output

The authenticity of host '111.111.11.111 (111.111.11.111)' can't be established.
ECDSA key fingerprint is fd:fd:d4:f9:77:fe:73:84:e1:55:00:ad:d6:6d:22:fe.
Are you sure you want to continue connecting (yes/no)? yes

Oznacza to, że Twój komputer lokalny nie rozpoznał hosta zdalnego. Najprawdopodobniej dzieje się tak podczas pierwszego połączenia z nowym hostem. Wpisz „tak” i naciśnij ENTER, aby kontynuować.


Następnie narzędzie przeskanuje Twoje konto lokalne w poszukiwaniu klucza id_rsa.pub, który utworzyliśmy wcześniej. Po znalezieniu klucza wyświetli monit o podanie hasła do konta użytkownika zdalnego:


Output

/usr/bin/ssh-copy-id: INFO: attempting to log in with the new key(s), to filter out any that are already installed
/usr/bin/ssh-copy-id: INFO: 1 key(s) remain to be installed -- if you are prompted now it is to install the new keys
username@111.111.11.111's password:

Wpisz hasło (pamiętaj, że wpisane hasło nie będzie wyświetlane ze względów bezpieczeństwa) i naciśnij ENTER. Narzędzie połączy się z kontem na hoście zdalnym, używając podanego hasła. Następnie skopiuje zawartość klucza ~/.ssh/id_rsa.pub do pliku o nazwie authorized_keys w katalogu domowym konta zdalnego ~/.ssh.


Następnie powinieneś zobaczyć następujący wynik:


Output

Number of key(s) added: 1

Logging into the machine, with: "ssh 'username@111.111.11.111'"
and check to make sure that only the key you wanted was added.

Na tym etapie procesu klucz id_rsa.pub został przesłany na konto zdalne.

Kopiowanie klucza publicznego za pomocą protokołu SSH

Jeśli nie dysponujesz identyfikatorem ssh-copy-id, ale masz dostęp SSH do konta na serwerze zabezpieczony hasłem, możesz przesłać klucze, korzystając ze standardowej metody SSH.

Możemy to zrobić, używając polecenia cat do odczytania zawartości publicznego klucza SSH na naszym komputerze lokalnym i przesłania go przez połączenie SSH do serwera zdalnego. Z drugiej strony, możemy upewnić się, że katalog ~/.ssh istnieje na koncie, którego używamy, a następnie zapisać przesłaną zawartość w pliku o nazwie authorized_keys w tym katalogu.

Użyjemy symbolu przekierowania >>, aby dodać zawartość zamiast ją nadpisywać. Pozwoli nam to dodawać klucze bez usuwania kluczy dodanych wcześniej.

Pełne polecenie wygląda następująco:

cat ~/.ssh/id_rsa.pub | ssh username@remote_host "mkdir -p ~/.ssh && cat >> ~/.ssh/authorized_keys"

Możesz zobaczyć następujący komunikat:

Output

The authenticity of host '111.111.11.111 (111.111.11.111)' can't be established.
ECDSA key fingerprint is fd:fd:d4:f9:77:fe:73:84:e1:55:00:ad:d6:6d:22:fe.
Are you sure you want to continue connecting (yes/no)? yes

Oznacza to, że Twój komputer lokalny nie rozpoznaje hosta zdalnego. Dzieje się tak przy pierwszym połączeniu z nowym hostem. Wpisz „tak” i naciśnij ENTER, aby kontynuować.

Następnie powinieneś zostać poproszony o podanie hasła do konta użytkownika zdalnego:

Output

username@111.111.11.111's password:

Po wpisaniu hasła zawartość klucza id_rsa.pub zostanie skopiowana na koniec pliku authorized_keys konta użytkownika zdalnego. Jeśli operacja się powiodła, przejdź do kroku 3.

Ręczne kopiowanie klucza publicznego

Jeśli nie posiadasz dostępu SSH do serwera zabezpieczonego hasłem, będziesz musiał ręcznie wykonać powyższą procedurę.

Ręcznie dodamy zawartość pliku id_rsa.pub do pliku ~/.ssh/authorized_keys na Twoim komputerze zdalnym.

Aby wyświetlić zawartość klucza id_rsa.pub, wpisz na komputerze lokalnym:


cat ~/.ssh/id_rsa.pub

Zobaczysz zawartość klucza, która powinna wyglądać mniej więcej tak:


Output

ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAACAQCqql6MzstZYh1TmWWv11q5O3pISj2ZFl9HgH1JLknLLx44+tXfJ7mIrKNxOOwxIxvcBF8PXSYvobFYEZjGIVCEAjrUzLiIxbyCoxVyle
7Q+bqgZ8SeeM8wzytsY+dVGcBxF6N4JS+zVk5eMcV385gG3Y6ON3EG112n6d+SMXY0OEBIcO6x+PnUSGHrSgpBgX7Ks1r7xqFa7heJLLt2wWwkARptX7udSq05paBhcpB0pHtA1Rfz3K2B+ZVIpSDfki9UVKzT8JUmwW6NNzSgxUfQHGwnW7kj4jp4AT0VZk3ADw497M2G
/12N0PPB5CnhHf7ovgy6nL1ikrygTKRFmNZISvAcywB9GVqNAVE+ZHDSCuURNsAInVzgYo9xgJDW8wUw2o8U77+xiFxgI5QSZX3Iq7YLMgeksaO4rBJEa54k8m5wEiEE1nUhLuJ0X/vh2xPff6SQ1BL/zkOhvJCACK6Vb15mDOeCSq54Cr7kvS46itMosi/uS66+PujOO+xt/2FWYepz6ZlN70bRly57Q06J+ZJoc9FfBCbCyYH7U
/ASsmY095ywPsBo1XQ9PqhnN1/YOorJ068foQDNVpm146mUpILVxmq41Cj55YKHEazXGsdBIbXWhcrRf4G2fJLRcGUr9q8/lERo9oxRm5JFX6TCmj6kmiFqv+Ow9gI0x8GvaQ== demo@test

Uzyskaj dostęp do zdalnego hosta za pomocą dostępnej metody.

Po uzyskaniu dostępu do konta na serwerze zdalnym upewnij się, że katalog ~/.ssh istnieje. Polecenie utworzy katalog, jeśli będzie to konieczne, lub nie wykona żadnego działania, jeśli już istnieje:

mkdir -p ~/.ssh

Teraz możesz utworzyć lub zmodyfikować plik authorized_keys w tym katalogu. Możesz dodać zawartość pliku id_rsa.pub na końcu pliku authorized_keys, tworząc go w razie potrzeby za pomocą tego polecenia:


W poniższym poleceniu zastąp ciąg public_key_string wynikiem polecenia cat ~/.ssh/id_rsa.pub, które wykonałeś w systemie lokalnym. Musi zaczynać się od ssh-rsa AAAA....

echo public_key_string >> ~/.ssh/authorized_keys

Teraz możemy spróbować uzyskać dostęp do naszego serwera Ubuntu, korzystając z uwierzytelniania bez hasła.

Krok 3 — uwierzytelnianie na serwerze Ubuntu przy użyciu kluczy SSH

Jeżeli wykonałeś jedną z powyższych procedur, powinieneś móc zalogować się do zdalnego hosta bez konieczności podawania hasła zdalnego konta.

Podstawowy proces jest taki sam, jak poprzednio:

$ ssh username@remote_host

Jeśli łączysz się z tym hostem po raz pierwszy (jeśli użyłeś ostatniej metody opisanej powyżej), możesz zobaczyć coś takiego:

Output

The authenticity of host '111.111.11.111 (111.111.11.111)' can't be established.
ECDSA key fingerprint is fd:fd:d4:f9:77:fe:73:84:e1:55:00:ad:d6:6d:22:fe.
Are you sure you want to continue connecting (yes/no)? yes

Jeśli tak się stanie, oznacza to, że komputer lokalny nie rozpoznaje hosta zdalnego. Wpisz „tak” i naciśnij ENTER, aby kontynuować.


Jeśli nie podałeś hasła do swojego klucza prywatnego, zostaniesz natychmiast zalogowany. Jeśli podałeś hasło do klucza prywatnego podczas jego tworzenia, zostaniesz poproszony o jego podanie (pamiętaj, że naciśnięcia klawiszy nie będą wyświetlane w sesji terminala ze względów bezpieczeństwa). Po uwierzytelnieniu powinna otworzyć się nowa sesja powłoki ze skonfigurowanym kontem na serwerze Ubuntu.


Jeśli uwierzytelnianie za pomocą klucza przebiegło pomyślnie, dowiedz się, jak jeszcze bardziej zabezpieczyć system, wyłączając uwierzytelnianie za pomocą hasła.


Krok 4 — Wyłącz uwierzytelnianie hasłem na swoim serwerze

Jeśli udało Ci się zalogować na swoje konto przez SSH bez hasła, pomyślnie skonfigurowałeś uwierzytelnianie oparte na kluczu SSH. Jednak mechanizm uwierzytelniania oparty na haśle jest nadal aktywny, co oznacza, że Twój serwer jest nadal narażony na ataki siłowe.


Przed wykonaniem kroków opisanych w tej sekcji upewnij się, że masz skonfigurowane uwierzytelnianie oparte na kluczu SSH dla konta root na tym serwerze lub, co jest lepsze, masz skonfigurowane uwierzytelnianie oparte na kluczu SSH dla konta innego niż root na tym serwerze z uprawnieniami sudo. Ten krok zablokuje logowanie oparte na haśle, dlatego kluczowe jest zapewnienie sobie dostępu administracyjnego.


Po potwierdzeniu, że Twoje konto zdalne ma uprawnienia administratora, zaloguj się na serwerze zdalnym za pomocą kluczy SSH, jako root lub na koncie z uprawnieniami sudo. Następnie otwórz plik konfiguracyjny demona SSH:

sudo nano /etc/ssh/sshd_config

W pliku wyszukaj dyrektywę o nazwie PasswordAuthentication. Może być ona zakomentowana. Odkomentuj wiersz i ustaw wartość na „no”. Spowoduje to wyłączenie możliwości logowania się przez SSH przy użyciu haseł do kont:

/etc/ssh/sshd_config
...
PasswordAuthentication no
...

Zapisz i zamknij plik po zakończeniu, naciskając CTRL + X, następnie Y, aby potwierdzić zapisanie pliku, a na koniec ENTER, aby wyjść z nano. Aby faktycznie wprowadzić te zmiany, musimy ponownie uruchomić usługę sshd:


$ sudo systemctl restart ssh

Jako środek ostrożności otwórz nowe okno terminala i sprawdź, czy usługa SSH działa prawidłowo, zanim zamkniesz tę sesję:

$ ssh username@remote_host

Po zweryfikowaniu usługi SSH możesz bezpiecznie zamknąć wszystkie bieżące sesje serwera.


Demon SSH na serwerze Ubuntu reaguje teraz tylko na klucze SSH. Uwierzytelnianie oparte na haśle zostało pomyślnie wyłączone.


Wniosek


Po ukończeniu tego samouczka uwierzytelnianie na Twoim serwerze powinno być skonfigurowane, dzięki czemu będziesz mógł zalogować się bez podawania hasła do konta.