SSH 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
0 Komentarze.