In questo post ho discusso dell'autenticazione SSH mediante lo scambio delle chiavi RSA. Adesso spiegherò come effettuare dei check su macchine remote (CentOS 6) utilizzando uno degli NMS più diffusi in ambito open source, ovvero Nagios.
In particolare, esso ci mette a disposizione un plugin pensato proprio per eseguire i suddetti check, il cui nome è piuttosto esplicativo: check_by_ssh. Prima di scendere nel dettaglio su come utilizzare il plugin in questione (con relativa sintassi), occorre descrivere, passo dopo passo, l'iter per la preparazione delle macchine remote e della macchina che ospita l'NMS vero e proprio.
Preparazione della macchina su cui è installato Nagios
Il primo step consiste nella modifica delle proprietà relative all'utente nagios, il quale verrà utilizzato dall'NMS per autenticarsi sulla macchina remota e lanciare tutti i controlli del caso. Analizzando il file /etc/passwd si nota che l'utente nagios possiede le seguenti caratteristiche:
nagios:x:496:492::/var/spool/nagios:/sbin/nologin
ciò significa che il suddetto utente non può loggarsi ed utilizzare la shell.
Per rimuovere tale limitazione è sufficiante modificare la stringa precedentemente illustrata nel modo seguente:
nagios:x:496:492::/var/spool/nagios:/bin/bash
dove 496 rappresenta l'UID, 492 il GID, /var/spool/nagios la directory home e /bin/bash la shell dell'utente.
A questo punto modifichiamo la password associata all'utente in questione:
[root@NMS ~]# passwd nagios
ed infine proviamo a loggarci:
su nagios
Se il prompt ottenuto è il seguente:
bash-4.1$
vuol dire che le nostre modifiche sono andate a buon fine.
Ora procediamo con la generazione della coppia di chiavi RSA (pubblica e privata) per la macchina su cui è installato Nagios (le quali, ovviamente, devono riferirsi all'utente nagios). Il comando da lanciare è il seguente:
bash-4.1$ ssh-keygen
Generating public/private rsa key pair.
Enter file in which to save the key (/var/spool/nagios/.ssh/id_rsa):
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /var/spool/nagios/.ssh/id_rsa.
Your public key has been saved in /var/spool/nagios/.ssh/id_rsa.pub.
The key fingerprint is:
f1:e5:35:cc:29:78:48:89:b5:ea:d6:ce:42:f5:3c:b8 nagios@NMS.test.loc
Preparazione delle macchine remote
Anche su ciascuna macchina remota che deve essere interrogata dal nostro NMS è necessario modificare le proprietà dell'utente nagios (seguendo quanto riportato in precedenza), eccezion fatta per la generazione delle chiavi RSA.
Una volta ottenuto il prompt:
bash-4.1$
sulla macchina remota, spostiamoci nella home directory di nagios (cd /var/spool/nagios) e lanciamo i seguenti comandi:
bash-4.1$ mkdir .ssh
bash-4.1$ cd .ssh
bash-4.1$ nano authorized_keys
inserendo al suo interno il contenuto del file id_rsa.pub presente nella macchina che ospita l'NMS.
Infine digitiamo:
bash-4.1$ chmod 600 authorized_keys
e proviamo a loggarci (dall'NMS) sulla macchina remota:
bash-4.1$ ssh remotemachine.test.loc
Se il suddetto comando non ci restituisce alcun tipo di errore (e soprattutto non ci richiede l'inserimento di password alcuna), vuol dire che l'autenticazione SSH mediante lo scambio delle chiavi RSA funziona correttamente.
Installiamo quindi i plugins di Nagios attraverso yum:
[root@remotemachine ~]# yum install nagios-plugins-all
Ad installazione completata torniamo sulla macchina su cui è installato Nagios ed esaminiamo il plugin check_by_ssh.
Dall'help del suddetto comando si ottiene:
bash-4.1$ ./check_by_ssh --help
check_by_ssh -H <host> -C <command> [-fqv] [-1|-2] [-4|-6]
[-S [lines]] [-E [lines]] [-t timeout] [-i identity]
[-l user] [-n name] [-s servicelist] [-O outputfile]
[-p port] [-o ssh-option] [-F configfile]
Ergo, editando il file commands.cfg presente nella dir /etc/nagios/objects possiamo forgiare dei comandi ad hoc, ad esempio:
# 'check_remote_disk' command definition
define command{
command_name check_remote_disk
command_line $USER1$/check_by_ssh -H $HOSTADDRESS$ -C "/usr/lib64/nagios/plugins/check_disk -w $ARG1$ -c $ARG2$ -p $ARG3$"
}
# 'check_remote_load' command definition
define command{
command_name check_remote_load
command_line $USER1$/check_by_ssh -H $HOSTADDRESS$ -C "/usr/lib64/nagios/plugins/check_load -w $ARG1$ -c $ARG2$"
}
# 'check_remote_procs' command definition
define command{
command_name check_remote_procs
command_line $USER1$/check_by_ssh -H $HOSTADDRESS$ -C "/usr/lib64/nagios/plugins/check_procs -w $ARG1$ -c $ARG2$ -s $ARG3$"
}
# 'check_remote_swap' command definition
define command{
command_name check_remote_swap
command_line $USER1$/check_by_ssh -H $HOSTADDRESS$ -C "/usr/lib64/nagios/plugins/check_swap -w $ARG1$ -c $ARG2$"
}
Non ci resta che modificare il file di configurazione che consente a Nagios di monitorare la macchina remota, ad esempio remotemachine.test.loc.cfg:
define service{
use local-service ; Name of service template to use
host_name remotemachine.test.loc
service_description Disk Usage
check_command check_remote_disk!20%!10%!/
notifications_enabled 0
}
define service{
use local-service ; Name of service template to use
host_name remotemachine.test.loc
service_description CPU Load
check_command check_remote_load!5.0,4.0,3.0!10.0,6.0,4.0
notifications_enabled 0
}
define service{
use local-service ; Name of service template to use
host_name remotemachine.test.loc
service_description CPU Procs
check_command check_remote_procs!250!400!RSZDT
notifications_enabled 0
}
define service{
use local-service ; Name of service template to use
host_name remotemachine.test.loc
service_description SWAP Usage
check_command check_remote_swap!20!10
notifications_enabled 0
}
Riavviamo Nagios per rendere effettive le suddette modifiche:
[root@NMS objects]# service nagios restart
ed abbiamo finito.
Enjoy!