9 Comprobaciones SSH

Descripción general

Las comprobaciones SSH se realizan como monitorización sin agente. No se necesita el agente Zabbix para las comprobaciones SSH.

Para realizar comprobaciones SSH, el servidor Zabbix debe estar inicialmente configurado con soporte SSH2 (libssh o libssh2). Consulte también: Requisitos.

A partir de RHEL 8, solo se admite libssh. Para otras distribuciones, se sugiere libssh en lugar de libssh2.

Configuración

Autenticación de frase de contraseña

Las comprobaciones SSH proporcionan dos métodos de autenticación: un par de usuario/contraseña y basado en archivos de claves.

Si no tiene intención de utilizar claves, no se requiere ninguna configuración adicional, más que vincular libssh o libssh2 a Zabbix, si está compilando desde la fuente.

Autenticación con archivo de clave

Para usar autenticación basada en claves para items SSH, se requieren ciertos cambios en la configuración del server.

Abra el archivo de configuración del server de Zabbix (zabbix_server.conf) como root y busque la siguiente línea:

# SSHKeyLocation=

Descoméntela y establezca la ruta completa a la carpeta donde se ubicarán las claves pública y privada:

SSHKeyLocation=/home/zabbix/.ssh

Guarde el archivo y reinicie el server de Zabbix después.

La ruta /home/zabbix aquí es el directorio personal de la cuenta de usuario zabbix, y .ssh es un directorio donde, de forma predeterminada, se generarán las claves pública y privada mediante el comando ssh-keygen dentro del directorio personal.

Normalmente, los paquetes de instalación del server de Zabbix de distintas distribuciones de SO crean la cuenta de usuario zabbix con un directorio personal en otra ubicación, por ejemplo, /var/lib/zabbix (como ocurre con las cuentas del sistema).

Antes de generar las claves, puede reasignar el directorio personal a /home/zabbix, para que coincida con el parámetro de configuración del server de Zabbix SSHKeyLocation mencionado anteriormente.

Los siguientes pasos pueden omitirse si la cuenta zabbix se ha añadido manualmente según la sección de instalación. En ese caso, lo más probable es que el directorio personal de la cuenta zabbix ya sea /home/zabbix.

Para cambiar el directorio personal de la cuenta de usuario zabbix, deben detenerse todos los procesos en ejecución que lo estén utilizando:

systemctl stop zabbix-agent
systemctl stop zabbix-server

Para cambiar la ubicación del directorio personal intentando moverlo también (si existe), debe ejecutarse el siguiente comando:

usermod -m -d /home/zabbix zabbix

También es posible que no existiera un directorio personal en la ubicación anterior, por lo que deberá crearse en la nueva ubicación. Una forma segura de intentarlo es:

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

Para asegurarse de que todo sea seguro, pueden ejecutarse comandos adicionales para establecer permisos en el directorio personal:

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

Los procesos detenidos anteriormente ahora pueden iniciarse de nuevo:

systemctl start zabbix-agent
systemctl start zabbix-server

Ahora pueden realizarse los pasos para generar las claves pública y privada con los siguientes comandos (para una mejor legibilidad, los prompts de los comandos se muestran como comentarios):

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):
<Dejar vacío>
# Enter same passphrase again: 
<Dejar vacío>
# 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+        |
# +-----------------+

Las claves pública y privada (id_rsa.pub e id_rsa) se han generado de forma predeterminada en el directorio /home/zabbix/.ssh, que corresponde al parámetro de configuración SSHKeyLocation del server de Zabbix.

Los tipos de clave distintos de "rsa" pueden ser compatibles con la herramienta ssh-keygen y con los servers SSH, pero puede que no sean compatibles con libssh2 utilizada por Zabbix.

Formulario de configuración de Shell

Este paso debe realizarse sólo una vez por cada equipo que se vaya a ser monitoreado por controles SSH.

Al utilizar los siguientes comandos, se puede instalar el archivo de clave pública en un equipo remoto 10.10.10.10, para que se puedan realizar las comprobaciones SSH con una cuenta root (para una mejor legibilidad, las indicaciones de comando están comentadas):

sudo -u zabbix ssh-copy-id [email protected]
# No se puede establecer la autenticidad del host '10.10.10.10 (10.10.10.10)'.
# La huella digital de la clave RSA es 38:ba:f2:a4:b5:d9:8f:52:00:09:f7:1f:75:cc:0b:46.
# ¿Estás seguro de que deseas continuar conectándote (sí/no)?# Advertencia: Se agregó permanentemente '10.10.10.10' (RSA) a la lista de hosts conocidos.
# contraseña de [email protected]:
<Ingrese la contraseña de root>
# Ahora intenta iniciar sesión en la máquina, con "ssh '[email protected]'",
# y verifique que solo se hayan agregado las claves que deseaba.

Ahora es posible verificar el inicio de sesión SSH usando la clave privada predeterminada (/home/zabbix/.ssh/id_rsa) para la cuenta de usuario zabbix:

sudo -u zabbix ssh [email protected]

Si el inicio de sesión es exitoso, entonces la parte de configuración en el shell se ha terminado y la sesión SSH remota se puede cerrar.

Configuración del item

Los comandos reales que se ejecutarán deben colocarse en el campo Executed script de la configuración del item. Se pueden ejecutar varios comandos uno tras otro colocándolos en una línea nueva. En este caso, los valores devueltos también se formatearán en varias líneas.

Todos los campos de entrada obligatorios están marcados con un asterisco rojo.

Los campos que requieren información específica para los items SSH son:

Parameter Description Comments
Type Seleccione aquí SSH agent.
Key Clave de item única (por host) en el formato ssh.run[descripción corta única,<ip>,<puerto>,<codificación>,<opciones ssh>,<subsystem>] descripción corta única es obligatoria y debe ser única para cada item SSH por host.

El puerto predeterminado es 22, no el puerto especificado en la interfaz a la que está asignado este item.

opciones ssh permiten pasar opciones SSH adicionales en el formato key1=value1;key2=value2,value3. Se pueden pasar varios valores para una clave separados por comas (en este caso, el parámetro debe ir entre comillas); se pueden pasar varias claves de opción separadas por punto y coma.

Se admiten las siguientes claves de opción: KexAlgorithms, HostkeyAlgorithms, Ciphers, MACs, PubkeyAcceptedKeyTypes. La compatibilidad de la clave y el valor de la opción depende de la biblioteca SSH (por ejemplo, PubkeyAcceptedKeyTypes solo es compatible con libssh); si una opción no es compatible, se devolverá un error y el item pasará a no ser compatible.

Tenga en cuenta que no se admiten el signo "+" para añadir configuraciones de cifrado ni "!" para deshabilitar configuraciones de cifrado específicas (como en GnuTLS y OpenSSL).

Ejemplos:
=> 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 permite pasar un subsistema SSH, limitando la conexión SSH a operaciones específicas permitidas por el subsistema (por ejemplo, transferencias de archivos mediante SFTP o gestión de dispositivos de red mediante NETCONF). Tenga en cuenta que el uso de un subsistema también puede requerir el uso de una sintaxis de script específica en el parámetro Executed script.

Ejemplos:
=> ssh.run[SFTPBackup,192.0.2.18,,,,sftp]
=> ssh.run[Cisco1234,192.0.2.18,,,,netconf]
Authentication method Uno de "Password" o "Public key".
User name Nombre de usuario (hasta 255 caracteres) para autenticarse en el host remoto. Obligatorio.
Public key file Nombre del archivo de clave pública si Authentication method es "Public key". Obligatorio. Ejemplo: id_rsa.pub - nombre predeterminado del archivo de clave pública generado por un comando ssh-keygen.
Private key file Nombre del archivo de clave privada si Authentication method es "Public key". Obligatorio. Ejemplo: id_rsa - nombre predeterminado del archivo de clave privada.
Password or
Key passphrase
Contraseña (hasta 255 caracteres) para autenticarse o
Frase de contraseña si se utilizó para la clave privada.
Deje el campo Key passphrase vacío si no se utilizó una frase de contraseña.
Consulte también los problemas conocidos sobre el uso de frases de contraseña.
Executed script Comando(s) de shell ejecutado(s) mediante una sesión remota SSH. El valor devuelto de los comandos de shell ejecutados está limitado a 16 MB (incluidos los espacios en blanco finales que se truncan); también se aplican los límites de la base de datos.

Tenga en cuenta que la biblioteca libssh2 puede truncar los scripts ejecutables a \~32kB.

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

Ejemplo (para el subsistema NETCONF):
<rpc>
<get-software-information/>
</rpc>
]]>]]>
<rpc>
<close-session/>
</rpc>
]]>]]>