Dystrybucja kluczy SSH

Generowanie klucza SSH

Zacznę od wygenerowania pary kluczy, za pomocą polecenia ssh-keygen. Polecenie możemy uruchomić bez podawania parametrów, jego wynikiem będą dwa pliki: .ssh/id_rsa oraz .ssh/id_rsa.pub, są to klucz prywatny i klucz publiczny. To właśnie klucz publiczny musimy wysłać na zdalną maszynę, żeby zalogować się do systemu używając wygenerowanej pary kluczy.

Do zabezpieczenia klucza prywatnego możemy użyć przepustki, jest to rodzaj hasła, które będzie wymagane przy próbie użycia klucza. O przepustkę zostaniemy zapytani podczas generowania kluczy Enter passphrase (empty for no passphrase):.

$ ssh-keygen
Generating public/private rsa key pair.
Enter file in which to save the key (/home/red/.ssh/id_rsa):
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /home/red/.ssh/id_rsa.
Your public key has been saved in /home/red/.ssh/id_rsa.pub.
The key fingerprint is:
05:ca:86:35:41:0b:00:dd:d9:38:70:b7:b3:85:3f:b1 red@wrap
The key's randomart image is:
+--[ RSA 2048]----+
|.oo+o=*..        |
|  ..=*.* .       |
|    ..O o .      |
|     . = +       |
|      . E        |
|         .       |
|                 |
|                 |
|                 |
+-----------------+

Skrypt ssh-klucze.sh

Plik .ssh/id_rsa.pub należy wysłać na serwery gdzie będziemy się logować, do tego stworzyłem prosty skrypt.

W skrypcie należy zwrócić uwagę, na dwie linie zawierające polecenie cat - > .ssh/authorized_keys, gdzie użyty jest znak > przekierowujący potok, jego użycie spowoduje zastąpienie pliku .ssh/authorized_keys. Jeśli nie chcemy, aby ten plik został nadpisany, należy użyć dwóch znaków >>, wtedy do pliku authorized_keys zostanie dodany nowy klucz.

Skrypt sprawdza czy został podany parametr, jeśli parametr istnieje to wysyła klucz na podany adres, w innym przypadku zostanie użyta lista hostów znajdująca się w pliku ssh-klucze.txt.

Plik ssh-klucze.txt, może wyglądać tak:

użytkownik@sdf.org
serwer-ssh.org -p 1234

Wysłanie klucza do pojedynczego hosta

$ ./ssh-klucze.sh user@192.168.6.66 -p 443

Skrypt ssh-klucze.sh

#!/bin/ksh

if [ ! -f ~/.ssh/id_rsa.pub ]; then
   echo "Brak klucza publicznego (~/.ssh/id_rsa.pub)."
   echo "Użyj polecenia ssh-keygen"
   exit
fi

if [ "$1" ]; then
   cat .ssh/id_rsa.pub | ssh $@ "if [ ! -d ~/.ssh ]; then mkdir ~/.ssh; \
   chmod 700 ~/.ssh; fi; cat - > .ssh/authorized_keys; \
   chmod 600 ~/.ssh/authorized_keys"
else
   cat ssh-klucze.txt | while read hostname; do
      echo "Wysylam klucz na: $hostname"
      cat .ssh/id_rsa.pub | ssh $hostname "if [ ! -d ~/.ssh/ ]; \
      then mkdir ~/.ssh; chmod 700 ~/.ssh; fi; cat - > .ssh/authorized_keys; \
      chmod 600 ~/.ssh/authorized_keys"
   done
fi

Agent SSH

Program ssh-agent przechowuje klucz prywatny i nie trzeba każdorazowo podawać przepustki.

$ eval $(ssh-agent); ssh-add
Agent pid 268
Enter passphrase for /home/red/.ssh/id_rsa:
Identity added: /home/red/.ssh/id_rsa (/home/red/.ssh/id_rsa)

Linki

Komentarze są wyłączone.