Amministrare multipli server con cluster-ssh


shell command for bloggers

L’azienda cresce, la virtualizzazione avanza, i sistemisti restano sempre gli stessi (pochi). Mi trovo a dover amministrare una trentina di server ed ogni mattina passo mezz’ora ad accedere in ssh per l’amministrazione. Una rapida ricerca su internet ed ho trovato cluster-ssh, che in accoppiata alle chiavi pubbliche/private è la soluzione al mio problema!

Collegandosi ad un cluster di macchine è possibile inviare un singolo comando a tutte quante, molto utile per esemprio in fase di aggiornamento, ma anche molto pericoloso. Immaginate le conseguenze di un rm -rf /* su tutto il parco macchine…

Per cominciare bisogna generare la coppia di chiavi pubblica e privata sulla macchina client, in modo da poter poi esportare la pubblica sui server:

g4b0@gabodeb:~$ cd .ssh/
g4b0@gabodeb:~/.ssh$ mkdir key
g4b0@gabodeb:~/.ssh$ cd key/
g4b0@gabodeb:~/.ssh/key$ ssh-keygen -t dsa -b 1024 -f ssh-key Generating public/private dsa key pair.
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in ssh-key.
Your public key has been saved in ssh-key.pub.
The key fingerprint is:
0c:ff:b9:78:7f:6a:11:0d:9e:68:82:0a:48:22:69:c1 g4b0@gabodeb
The key's randomart image is:
+--[ DSA 1024]----+
|.o. |
|+E . |
|=. .. o + |
|. . .+. o + . |
| . . So . |
| . . .. |
| o . |
| .... . |
| ...ooo |
+-----------------+
g4b0@gabodeb:~/.ssh/key$

A questo punto dobbiamo inviare la chiave pubblica ai vari server, per poi inserirla negli authorized_hosts:

g4b0@gabodeb:~/.ssh/key$ scp ssh-key.pub root@server:/root/.ssh
root@server's password:
ssh-key.pub 100% 602 0.6KB/s 00:00

Ora sul server aggiungiamo la chiave pubblica al file degli host autorizzati:

server:~/.ssh# cat ssh-key.pub >> authorized_keys
server:~/.ssh# more authorized_keys
ssh-dss AAAAB3NzaC1kc3MAAACBANaQ0CWI77PX66wLS7UsbVke1ryCyfdU+RADL+Po/Vs2Yj2Ggf4xr277G48yRFSk9SsmYW7jaNVYKRAH+ALQFJzFnvXUiQMiwoobui+ISwxlLB5V3t9jeGNhzr2zN6vst
UQiIlHNh5HN4zAnGpffGmFThy2UV0QhddXG8C5dpnvLAAAAFQDBwRc79CVFXxGqc5wj9YhrRtH0UQAAAIBBj9kb3+dlTpwxZyetDfvm9YrhN+f1UvQg39f6uzeUKoOx3P/LDmwS1YXtb4mZ+iYaYT4ibfEXED
u1lUK1KNd0fRIgbHwxXf1RH+hs151zC4ShLgrfDTfZC2BZVWyWyN1kRrMx5NZP4Og7Q+g1teZB5VxFnqu67AZDB+TquOwCrgAAAIAI2PVRqXNljRyP2hqKt7+ugJ77/oZ/7ujl8eLuwvGBz+uPqMGi99aoK4M
qKqVLE91ZhFMr/jxgXHBf1eXTDpO06rrOglQUxfkRegwZxJ2TvLpmRgHF+bxpD3oPKIjJ092SuTn18oJWDabZf9dxk+UQxO9gn6OqqT4scMp5/ZdIyA== g4b0@gabodeb

Ed il gioco è fatto. Ora possiamo autenticarci con il server senza dover digitare la password, avendo l’accortezza di aggiungere la riga al file /etc/ssh/ssh_config (o al file relativo al vostro utente):

IdentityFile ~/.ssh/key/ssh-key

Per una completa trattazione dell’autenticazione tramite chiave pubblica/privata e molto altro, in particolare l’rsync automatico tra server, rimando all’ottima pagina di Troy Johnson: Using Rsync and SSH.

Ora installiamo clusterssh con un semplice

gabodeb:/home/g4b0/.ssh/key# aptitude install clusterssh

Ed il gioco è fatto. Aggiungiamo i server che ci servono al file /etc/cluster e non ci resta che collegarci!