9 controlli SSH

Panoramica

I controlli SSH vengono eseguiti come monitoraggio senza agent. Zabbix agent non è necessario per i controlli SSH.

Per eseguire i controlli SSH, Zabbix server deve essere inizialmente configurato con il supporto SSH2 (libssh o libssh2). Vedere anche: Requisiti.

A partire da RHEL 8, è supportato solo libssh. Per le altre distribuzioni, si consiglia libssh rispetto a libssh2.

Configurazione

Autenticazione con passphrase

I controlli SSH forniscono due metodi di autenticazione: una coppia utente/password e uno basato su file di chiave.

Se non si intende utilizzare le chiavi, non è richiesta alcuna configurazione aggiuntiva, oltre al collegamento di libssh o libssh2 a Zabbix, se si esegue la compilazione dal codice sorgente.

Autenticazione tramite file chiave

Per utilizzare l'autenticazione basata su chiave per gli item SSH, sono necessarie alcune modifiche alla configurazione del server.

Aprire il file di configurazione del server Zabbix (zabbix_server.conf) come root e cercare la seguente riga:

# SSHKeyLocation=

Rimuoverne il commento e impostare il percorso completo della cartella in cui saranno collocate le chiavi pubblica e privata:

SSHKeyLocation=/home/zabbix/.ssh

Salvare il file e successivamente riavviare il server Zabbix.

Il percorso /home/zabbix qui è la directory home dell'account utente zabbix, e .ssh è una directory in cui, per impostazione predefinita, le chiavi pubblica e privata verranno generate da un comando ssh-keygen all'interno della directory home.

Di solito i pacchetti di installazione del server Zabbix provenienti da diverse distribuzioni OS creano l'account utente zabbix con una directory home in un'altra posizione, ad esempio /var/lib/zabbix (come per gli account di sistema).

Prima di generare le chiavi, è possibile riallocare la directory home in /home/zabbix, in modo che corrisponda al parametro di configurazione del server Zabbix SSHKeyLocation menzionato sopra.

I passaggi seguenti possono essere saltati se l'account zabbix è stato aggiunto manualmente secondo la sezione di installazione. In tal caso, la directory home dell'account zabbix è molto probabilmente già /home/zabbix.

Per cambiare la directory home dell'account utente zabbix, tutti i processi in esecuzione che la stanno utilizzando devono essere arrestati:

systemctl stop zabbix-agent
systemctl stop zabbix-server

Per cambiare la posizione della directory home tentando anche di spostarla (se esiste), deve essere eseguito il seguente comando:

usermod -m -d /home/zabbix zabbix

È anche possibile che una directory home non esistesse nella vecchia posizione, quindi dovrà essere creata nella nuova posizione. Un tentativo sicuro per farlo è:

test -d /home/zabbix || mkdir /home/zabbix

Per assicurarsi che tutto sia sicuro, è possibile eseguire comandi aggiuntivi per impostare i permessi della directory home:

chown zabbix:zabbix /home/zabbix
chmod 700 /home/zabbix

I processi precedentemente arrestati possono ora essere riavviati:

systemctl start zabbix-agent
systemctl start zabbix-server

Ora è possibile eseguire i passaggi per generare le chiavi pubblica e privata con i seguenti comandi (per una migliore leggibilità, i prompt dei comandi sono commentati):

sudo -u zabbix ssh-keygen -t rsa
# Generating public/private rsa key pair.
# Enter file in which to save the key (/home/zabbix/.ssh/id_rsa):
/home/zabbix/.ssh/id_rsa
# Enter passphrase (empty for no passphrase):
<Leave empty>
# Enter same passphrase again: 
<Leave empty>
# Your identification has been saved in /home/zabbix/.ssh/id_rsa.
# Your public key has been saved in /home/zabbix/.ssh/id_rsa.pub.
# The key fingerprint is:
# 90:af:e4:c7:e3:f0:2e:5a:8d:ab:48:a2:0c:92:30:b9 zabbix@it0
# The key's randomart image is:
# +--[ RSA 2048]----+
# |                 |
# |       .         |
# |      o          |
# | .     o         |
# |+     . S        |
# |.+   o =         |
# |E .   * =        |
# |=o . ..* .       |
# |... oo.o+        |
# +-----------------+

Le chiavi pubblica e privata (id_rsa.pub e id_rsa) sono state generate per impostazione predefinita nella directory /home/zabbix/.ssh, che corrisponde al parametro di configurazione del server Zabbix SSHKeyLocation.

Tipi di chiave diversi da "rsa" possono essere supportati dallo strumento ssh-keygen e dai server SSH, ma potrebbero non essere supportati da libssh2 utilizzata da Zabbix.

Modulo di configurazione della shell

Questo passaggio deve essere eseguito una sola volta per ogni host che verrà monitorato tramite controlli SSH.

Utilizzando i seguenti comandi, il file della chiave pubblica può essere installato su un host remoto 10.10.10.10, in modo che i controlli SSH possano essere eseguiti con un account root (per una migliore leggibilità, i prompt dei comandi sono commentati):

sudo -u zabbix ssh-copy-id [email protected]
# The authenticity of host '10.10.10.10 (10.10.10.10)' can't be established.
# RSA key fingerprint is 38:ba:f2:a4:b5:d9:8f:52:00:09:f7:1f:75:cc:0b:46.
# Are you sure you want to continue connecting (yes/no)?
yes
# Warning: Permanently added '10.10.10.10' (RSA) to the list of known hosts.
# [email protected]'s password:
<Enter root password>
# Now try logging into the machine, with "ssh '[email protected]'",
# and check to make sure that only the key(s) you wanted were added.

Ora è possibile verificare l'accesso SSH utilizzando la chiave privata predefinita (/home/zabbix/.ssh/id_rsa) per l'account utente zabbix:

sudo -u zabbix ssh [email protected]

Se l'accesso ha esito positivo, la parte di configurazione nella shell è terminata e la sessione SSH remota può essere chiusa.

Configurazione degli item

I comandi effettivi da eseguire devono essere inseriti nel campo Executed script nella configurazione dell'item. È possibile eseguire più comandi uno dopo l'altro inserendoli su una nuova riga. In questo caso anche i valori restituiti saranno formattati su più righe.

Tutti i campi di input obbligatori sono contrassegnati con un asterisco rosso.

I campi che richiedono informazioni specifiche per gli item SSH sono:

Parameter Description Comments
Type Selezionare qui SSH agent.
Key Chiave item univoca (per host) nel formato ssh.run[breve descrizione univoca,<ip>,<port>,<encoding>,<ssh options>,<subsystem>] breve descrizione univoca è obbligatoria e deve essere univoca per ciascun item SSH per host.

La porta predefinita è 22, non la porta specificata nell'interfaccia a cui questo item è assegnato.

ssh options consentono di passare opzioni SSH aggiuntive nel formato key1=value1;key2=value2,value3. È possibile passare più valori per una chiave separandoli con una virgola (in questo caso, il parametro deve essere quoted); è possibile passare più chiavi di opzione separate da punto e virgola.

Sono supportate le seguenti chiavi di opzione: KexAlgorithms, HostkeyAlgorithms, Ciphers, MACs, PubkeyAcceptedKeyTypes. Il supporto per chiave e valore dell'opzione dipende dalla libreria SSH (ad esempio, PubkeyAcceptedKeyTypes è supportato solo con libssh); se un'opzione non è supportata, verrà restituito un errore e l'item diventerà non supportato.

Si noti che il segno "+" per aggiungere impostazioni dei cifrari e "!" per disabilitare impostazioni specifiche dei cifrari (come in GnuTLS e OpenSSL) non sono supportati.

Esempi:
=> ssh.run[KexAlgorithms,127.0.0.1,,,Ciphers=aes128-ctr]
=> ssh.run[KexAlgorithms,,,,"KexAlgorithms=diffie-hellman-group1-sha1;HostkeyAlgorithms=ssh-rsa,ssh-dss,ecdh-sha2-nistp256"]
=> ssh.run[PubkeyAcceptedKeyTypes,127.0.0.1,,,PubkeyAcceptedKeyTypes=ssh-rsa]

subsystem consente di passare un sottosistema SSH, limitando la connessione SSH a operazioni specifiche consentite dal sottosistema (ad esempio, trasferimenti di file tramite SFTP o gestione di dispositivi di rete tramite NETCONF). Si noti che l'uso di un sottosistema può richiedere anche l'uso di una sintassi di script specifica nel parametro Executed script.

Esempi:
=> ssh.run[SFTPBackup,192.0.2.18,,,,sftp]
=> ssh.run[Cisco1234,192.0.2.18,,,,netconf]
Authentication method Uno tra "Password" o "Public key".
User name Nome utente (fino a 255 caratteri) per l'autenticazione sull'host remoto. Obbligatorio.
Public key file Nome del file della chiave pubblica se Authentication method è "Public key". Obbligatorio. Esempio: id_rsa.pub - nome file predefinito della chiave pubblica generata dal comando ssh-keygen.
Private key file Nome del file della chiave privata se Authentication method è "Public key". Obbligatorio. Esempio: id_rsa - nome file predefinito della chiave privata.
Password or
Key passphrase
Password (fino a 255 caratteri) per l'autenticazione oppure
Passphrase se è stata usata per la chiave privata.
Lasciare vuoto il campo Key passphrase se la passphrase non è stata usata.
Vedere anche i problemi noti relativi all'uso della passphrase.
Executed script Comando/i shell eseguito/i usando una sessione remota SSH. Il valore restituito dal/i comando/i shell eseguito/i è limitato a 16MB (inclusi gli spazi finali che vengono troncati); si applicano anche i limiti del database.

Si noti che la libreria libssh2 può troncare gli script eseguibili a \~32kB.

Esempi:
date +%s
systemctl status mysql-server
ps auxww \| grep httpd \| wc -l

Esempio (per il sottosistema NETCONF):
<rpc>
<get-software-information/>
</rpc>
]]>]]>
<rpc>
<close-session/>
</rpc>
]]>]]>