Linux: Generowanie klucza SSH do logowania bez hasła

13-sty-2022

XXI wiek, a ciągle używamy haseł? Bez haseł jest prościej i hahahah… bezpieczniej! Wiem, wiem, koniec końców to hasło gdzieś się tam pojawi, ale…

Jeśli między systemami opartymi o Linux/Unix chcesz logować się bez podawania hasła w oparciu o uwierzytelnie kluczem prywatnym i publicznym to:

Zacznij od wygenerowania tych kluczy. Służy do tego polecenie ssh-keygen. Polecenie zaproponuje zapisanie klucza prywantego w katalogu domowym w .ssh/id_rsa, a publicznego w .ssh/id_rsa.pub.

Taka lokalizacja nie jest zła, jeśli ten prywatny klucz chcesz zachować lokalnie na swoim komputerze, a publiczny przegrać na zdalną maszynę, która powinna akceptować Twoje logowanie bez prośby o hasło:

ssh-keygen

Generating public/private rsa key pair.
Enter file in which to save the key (/home/boss/.ssh/id_rsa): 
/home/boss/.ssh/id_rsa already exists.
Overwrite (y/n)? y
Enter passphrase (empty for no passphrase): 
Enter same passphrase again: 
Your identification has been saved in /home/boss/.ssh/id_rsa
Your public key has been saved in /home/boss/.ssh/id_rsa.pub
The key fingerprint is:
SHA256:tmvrlp4/kvgPulfa7Bl4qiD0bd2mNQwACtBLgi756gc boss@u20
The key's randomart image is:
+---[RSA 3072]----+
|=.  .            |
|o.o. .           |
|.+..  .          |
|o..    .         |
|...     S        |
| E.. . o *.      |
| .o o o.=BO      |
|.  o o..OX++     |
|...   +XX*=.     |
+----[SHA256]-----+

Tworząc te klucze można (i w sumie jest to zalecane), zabezpieczyć je hasłem. W takim  przypadku przed skorzystaniem z klucza prywatnego będziemy musieli najpierw go otworzyć podając to hasło.

Polecenie ssh-keygen pozwala na określenie dodatkowych parametrów kluczy jak, ich algorytm, czy długość.

Gdy klucz już jest wygenerowany, to należy go rozdystrybuować na systemy, które powinny go akceptować  i pozwalać logować się bez hasła. Zrobisz to poleceniem

ssh-copy-id username@host.address.com

Jeśli klucz publiczny miałby być wykorzystywany tylko na lokalnym serwerze, to należy go umieścić w pliku authorized_keys.

Jeśli masz więcej wygenerowanych kluczy, to możesz je przesyłać wybiórczo do zdalnego stystemu korzystając z opcji -i o tak:

ssh-copy-id -i ./servername username@host.address.com

gdzie servername to nazwa pliku z kluczem wygenerowanym wcześniej za pomocą ssh-keygen.

Od tej pory można się już łączyć do zdalnej maszyny przez

ssh username@host.address.com

Na docelowej maszynie plik powinien zostać umieszczony w katalogu domowym użytkownika w podkatalogu .ssh. Uwaga – ten podkatalog musi mieć w odpowiedni sposób zdefiniowane bezpieczeństwo: właścicielem musi być użytkownik, a uprawnienia powinny być odebrane dla grupy i innych (700)

Jeśli z jednego serwera chcesz łączyć się do większej liczby innych serwerów, możesz w katalogu ~/.ssh utworzyć plik config o zawartości podobnej jak ta:

# Control node
Host dbserv10
HostName dbserv11
PreferredAuthentications publickey
IdentityFile ~/.ssh/dbserv10

# Client node
Host dbserv11
HostName dbserv11
PreferredAuthentications publickey
IdentityFile ~/.ssh/dbserv11

Wykonując połączenie na konto user@hostname, zostanie pobrany od razu właściwy klucz.

 

 

Komentarze są wyłączone

Autor: Rafał Kraik