[comment]: # ({96aacdf0-26d9bc44})
# 11 SSH agent

[comment]: # ({/96aacdf0-26d9bc44})

[comment]: # ({d9efe87e-4cdff2c1})
### Descripción general

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

Para realizar comprobaciones SSH, el server de Zabbix debe estar inicialmente
[configurado](/manual/installation/install/sources#configure-the-sources) con soporte SSH2
(libssh o libssh2). Consulte también:
[Requisitos](/manual/installation/requirements#serverproxy).

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

[comment]: # ({/d9efe87e-4cdff2c1})

[comment]: # ({76b2e481-5d32b87c})
### Configuración

[comment]: # ({/76b2e481-5d32b87c})

[comment]: # ({69e9c4a5-753f5c30})
##### Autenticación por frase de contraseña

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

Si no tiene intención de usar claves, no se requiere configuración adicional, además de vincular libssh o libssh2 a Zabbix, si está compilando desde el código fuente.

[comment]: # ({/69e9c4a5-753f5c30})

[comment]: # ({90e14e64-44fd07da})
##### Autenticación con archivo de clave

Para usar autenticación basada en clave para los 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*](/manual/concepts/server/server_params)) como `root`
y busque la siguiente línea:

```ini
# SSHKeyLocation=
```

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

```ini
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](http://en.wikipedia.org/wiki/Ssh-keygen) dentro del directorio personal.

Por lo general, 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, podría reasignar el directorio personal a */home/zabbix*, de modo que corresponda con el parámetro de configuración `SSHKeyLocation` del server de Zabbix mencionado arriba.

::: noteclassic
Los siguientes pasos se pueden omitir si la cuenta *zabbix* se ha agregado manualmente según la [sección de instalación](/manual/installation/install/sources#create-user-account).
En tal 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 usando:

```bash
systemctl stop zabbix-agent
systemctl stop zabbix-server
```

Para cambiar la ubicación del directorio personal con un intento de moverlo (si existe), debe ejecutarse el siguiente comando:

```bash
usermod -m -d /home/zabbix zabbix
```

También es posible que el directorio personal no existiera en la ubicación anterior, por lo que debe crearse en la nueva ubicación. Una forma segura de hacerlo es:

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

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

```bash
chown zabbix:zabbix /home/zabbix
chmod 700 /home/zabbix
```

Los procesos detenidos anteriormente ya pueden iniciarse de nuevo:

```bash
systemctl start zabbix-agent
systemctl start zabbix-server
```

Ahora, los pasos para generar las claves pública y privada se pueden realizar con los siguientes comandos (para mejorar la legibilidad, los prompts de comando se han comentado):

```bash
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+        |
# +-----------------+
```

::: noteclassic
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.
:::

::: noteimportant
Los tipos de clave distintos de "rsa" pueden ser compatibles con la
herramienta ssh-keygen y con los servidores SSH, pero es posible que no sean compatibles con
libssh2, que es utilizado por Zabbix.
:::

[comment]: # ({/90e14e64-44fd07da})

[comment]: # ({b84f1792-7e6b0273})
##### Formulario de configuración de Shell

Este paso debe realizarse solo una vez por cada equipo que será
monitorizado mediante comprobaciones SSH.

Utilizando los siguientes comandos, el archivo de clave **pública** puede instalarse
en un equipo remoto *10.10.10.10*, de modo que las comprobaciones SSH puedan realizarse
con una cuenta *root* (para una mejor legibilidad, los prompts de los comandos están comentados):

```bash
sudo -u zabbix ssh-copy-id root@10.10.10.10
# 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.
# root@10.10.10.10's password:
<Introduzca la contraseña de root>
# Now try logging into the machine, with "ssh 'root@10.10.10.10'",
# and check to make sure that only the key(s) you wanted were added.
```

Ahora es posible comprobar el inicio de sesión SSH utilizando la clave privada por defecto
(*/home/zabbix/.ssh/id\_rsa*) para la cuenta de usuario *zabbix*:

```bash
sudo -u zabbix ssh root@10.10.10.10
```

Si el inicio de sesión es exitoso, entonces la parte de configuración en la shell está
finalizada y la sesión SSH remota puede cerrarse.

[comment]: # ({/b84f1792-7e6b0273})

[comment]: # ({6dca8e7a-fe23daa8})
##### 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.

![](../../../../../assets/en/manual/config/items/itemtypes/ssh_item.png){width="600"}

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 **SSH agent** aquí.| |
|*Key*|Clave de item única (por host) con el formato **ssh.run\[descripción corta única,<ip>,<port>,<encoding>,<ssh options>,<subsystem>\]**|**descripción corta única** es obligatoria y debe ser única para cada item SSH por host.<br><br>El puerto predeterminado es 22, no el puerto especificado en la interfaz a la que está asignado este item.<br><br>**ssh options** permite pasar opciones SSH adicionales con 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](/manual/config/items/item/key#parameter--quoted-string)); se pueden pasar varias claves de opción separadas por punto y coma.<br><br>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.<br><br>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).<br><br>Ejemplos:<br>=> `ssh.run[KexAlgorithms,127.0.0.1,,,Ciphers=aes128-ctr]`<br>=> `ssh.run[KexAlgorithms,,,,"KexAlgorithms=diffie-hellman-group1-sha1;HostkeyAlgorithms=ssh-rsa,ssh-dss,ecdh-sha2-nistp256"]`<br>=> `ssh.run[PubkeyAcceptedKeyTypes,127.0.0.1,,,PubkeyAcceptedKeyTypes=ssh-rsa]`<br><br>**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 administració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*.<br><br>Ejemplos:<br>=> `ssh.run[SFTPBackup,192.0.2.18,,,,sftp]`<br>=> `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](http://en.wikipedia.org/wiki/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<br>*Key passphrase*|Contraseña (hasta 255 caracteres) para autenticarse o<br>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.<br>Consulte también los [problemas conocidos](/manual/installation/known_issues#ssh-checks) 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 16MB (incluidos los espacios en blanco finales que se truncan); también se aplican los [límites de la base de datos](/manual/config/items/item#item-data-limits).<br><br>Tenga en cuenta que la biblioteca libssh2 puede truncar los scripts ejecutables a \~32kB.<br><br>Ejemplos:<br>`date +%s`<br>`systemctl status mysql-server`<br>`ps auxww \| grep httpd \| wc -l`<br><br>Ejemplo (para el subsistema NETCONF):<br>`<rpc>`<br>`<get-software-information/>`<br>`</rpc>`<br>`]]>]]>`<br>`<rpc>`<br>`<close-session/>`<br>`</rpc>`<br>`]]>]]>`|

[comment]: # ({/6dca8e7a-fe23daa8})
