Archivi tag: ssh-keygen

Effettuare check su macchine remote mediante Nagios

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.

nag.jpg

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!

PS: se sulla macchina target è in funzione SElinux occorre disabilitarlo mediante il comando:

[root@remotemachine]# setenforce 0

e successivamente evitare che tale servizio venga riattivato dopo ogni reboot:

[root@remotemachine]# nano /etc/sysconfig/selinux

sostituendo la stringa

SELINUX=enforcing

con

SELINUX=disabled