SSH – klucze RSA (logowanie bez hasła)

ssh klucze RSASSH czyli Secure Shell pozwala na zdalne połączenie z serwerem. Co najważniejsze komunikacja pomiędzy klientem a serwerem jest szyfrowana. Domyślnie, logujemy się wpisując użytkownika oraz hasło. Jednak nie ma problemu aby takie zachowanie zmienić i uwierzytelniać swojego użytkownika przy użyciu kluczy RSA. Rozwiązanie bardzo wygodne jeśli często logujemy się po SSH, mamy wiele serwerów lub po prostu nie chcemy wpisywać za każdym razem hasła. Przydatne też w przypadku skryptów (np. Nagios, backup danych na zdalny serwer).

Zaczniemy od wygenerowania pary kluczy (prywatny i publiczny), do tego użyjemy polecenia ssh-keygen. Opcja -b określa długość klucza (bitów):

root@obsd51-m1:~>ssh-keygen  -b 4096
Generating public/private rsa key pair.
Enter file in which to save the key (/root/.ssh/id_rsa): 
Created directory '/root/.ssh'.
Enter passphrase (empty for no passphrase): 
Enter same passphrase again: 
Your identification has been saved in /root/.ssh/id_rsa.
Your public key has been saved in /root/.ssh/id_rsa.pub.
The key fingerprint is:
dd:9c:a1:73:d6:29:55:e6:49:e2:5c:98:67:da:31:db root@obsd51-m1.my.domain
The key's randomart image is:
+--[ RSA 4096]----+
|             .ooo|
|            oo+O.|
|            .o*.*|
|         . + * +E|
|        S + B o  |
|           + .   |
|                 |
|                 |
|                 |
+-----------------+

Podczas generowania kluczy możemy dodatkowo zabezpieczyć je hasłem (nie jest to konieczne). W katalogu $HOME/.ssh znajdziemy 2 nowe pliki. id_rsa to klucz prywatny, który musimy zachować tylko dla siebie. Natomiast id_rsa.pub to klucz publiczny i to własnie jego przekopiujemy na zdalny serwer

root@obsd51-m1:~>ls -l ~/.ssh/
total 12
-rw-------  1 root  wheel  3243 Aug 31 13:53 id_rsa
-rw-r--r--  1 root  wheel   750 Aug 31 13:53 id_rsa.pub

Upewnijmy się też, że nikt inny nie ma praw odczytu/zapisu do katalogu .ssh oraz pliku id_rsa

chmod 700 ~/.ssh
chmod 600 ~/.ssh/id_rsa

Kolejny krok to dystrybucja klucza publicznego na zdalny serwer. Wykorzystać możemy skrypt ssh-copy-id, który automatycznie doda nasz klucz do pliku authorized_keys. Niestety skrypt nie jest dostępny w systemie OpenBSD. W takim razie ściągniemy go z naszego bloga (można go też znaleźć w Internecie):

root@obsd51-m1:~>wget https://tech-itcore.pl/wp-content/uploads/ssh-copy-id.bz2 -O /usr/bin/local/ssh-copy-id.bz2
root@obsd51-m1:~>bunzip2 /usr/bin/local/ssh-copy-id.bz2 
root@obsd51-m1:~>chmod +x /usr/local/bin/ssh-copy-id

Następnie kopiujemy klucz na zdalny serwer (w naszym przykładzie 192.168.1.247):

root@obsd51-m1:~>ssh-copy-id root@192.168.1.247
root@192.168.1.247's password: 
Now try logging into the machine, with "ssh 'root@192.168.1.247'", and check in:

  ~/.ssh/authorized_keys

to make sure we haven't added extra keys that you weren't expecting

Na zdalnej maszynie utworzony został plik authorized_keys, w którym to właśnie jest zapisany nasz publiczny klucz id_rsa.pub. Czas na ostateczny test, czyli logowanie bez hasła:

root@obsd51-m1:~>ssh root@192.168.1.247
Last login: Fri Aug 31 14:12:54 2012 from obsd51.my.domain
OpenBSD 5.1 (GENERIC) #160: Sun Feb 12 09:46:33 MST 2012
...
root@obsd51-m2:~>
root@obsd51-m2:~>cat /root/.ssh/authorized_keys                                                                                                                                         
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAACAQDbTDyZddQ....

i wszystko działa. Pamiętajmy też, że aby umożliwić autoryzację za pomocą kluczy RSA zdalny serwer musi mieć włączoną opcję RSAAuthentication:

root@obsd51-m2:~>grep RSAAuthentication /etc/ssh/sshd_config 
RSAAuthentication yes

Zostaw komentarz


Podpowiedź - możesz użyć tych HTML tagów i atrybutów:
<a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>

Obraz CAPTCHY

*