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

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

[comment]: # ({d9efe87e-4cdff2c1})
### Aperçu

Les vérifications SSH sont effectuées en tant que supervision sans agent. L’agent Zabbix n’est pas nécessaire pour les vérifications SSH.

Pour effectuer des vérifications SSH, le serveur Zabbix doit d’abord être
[configuré](/manual/installation/install/sources#configure-the-sources) avec la prise en charge de SSH2
(libssh ou libssh2). Voir aussi :
[Exigences](/manual/installation/requirements#serverproxy).

::: noteimportant
À partir de RHEL 8, seul libssh est pris en charge. Pour les autres distributions, libssh est recommandé à la place de libssh2.
:::

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

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

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

[comment]: # ({69e9c4a5-753f5c30})
##### Authentification par phrase secrète

Les vérifications SSH offrent deux méthodes d'authentification : une paire nom d'utilisateur/mot de passe et une authentification basée sur un fichier de clé.

Si vous n'avez pas l'intention d'utiliser des clés, aucune configuration supplémentaire n'est requise, à part l'association de libssh ou libssh2 à Zabbix, si vous effectuez une compilation à partir des sources.

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

[comment]: # ({90e14e64-44fd07da})
##### Authentification par fichier de clé

Pour utiliser l'authentification par clé pour les éléments SSH, certaines modifications de la configuration du serveur sont nécessaires.

Ouvrez le fichier de configuration du serveur Zabbix
([*zabbix\_server.conf*](/manual/concepts/server/server_params)) en tant que `root`
et recherchez la ligne suivante :

```ini
# SSHKeyLocation=
```

Décommentez-la et définissez le chemin complet vers le dossier où se trouveront les clés publique et privée :

```ini
SSHKeyLocation=/home/zabbix/.ssh
```

Enregistrez le fichier, puis redémarrez le serveur Zabbix.

Le chemin */home/zabbix* ici correspond au répertoire personnel du compte utilisateur *zabbix*,
et *.ssh* est un répertoire dans lequel, par défaut, les clés publique et privée seront
générées par la commande [ssh-keygen](http://en.wikipedia.org/wiki/Ssh-keygen)
dans le répertoire personnel.

En général, les paquets d'installation du serveur Zabbix provenant de différentes distributions
OS créent le compte utilisateur *zabbix* avec un répertoire personnel situé ailleurs,
par exemple */var/lib/zabbix* (comme pour les comptes système).

Avant de générer les clés, vous pouvez réaffecter le répertoire personnel à */home/zabbix*,
afin qu'il corresponde au paramètre de configuration `SSHKeyLocation` du serveur Zabbix
mentionné ci-dessus.

::: noteclassic
Les étapes suivantes peuvent être ignorées si le compte *zabbix* a été ajouté manuellement
conformément à la [section d'installation](/manual/installation/install/sources#create-user-account).
Dans ce cas, le répertoire personnel du compte *zabbix* est très probablement déjà
*/home/zabbix*.
:::

Pour modifier le répertoire personnel du compte utilisateur *zabbix*, tous les processus
en cours qui l'utilisent doivent être arrêtés :

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

Pour modifier l'emplacement du répertoire personnel en tentant de le déplacer (s'il
existe), la commande suivante doit être exécutée :

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

Il est également possible qu'un répertoire personnel n'existe pas à l'ancien
emplacement ; il doit alors être créé au nouvel emplacement. Une tentative sûre pour le faire est :

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

Pour s'assurer que tout est sécurisé, des commandes supplémentaires peuvent être exécutées pour
définir les permissions du répertoire personnel :

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

Les processus précédemment arrêtés peuvent maintenant être redémarrés :

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

Les étapes pour générer les clés publique et privée peuvent maintenant être effectuées
avec les commandes suivantes (pour une meilleure lisibilité, les invites de commande sont commentées) :

```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
Les clés publique et privée (*id\_rsa.pub* et *id\_rsa*)
ont été générées par défaut dans le répertoire */home/zabbix/.ssh*,
ce qui correspond au paramètre de configuration `SSHKeyLocation` du serveur Zabbix.
:::

::: noteimportant
Les types de clés autres que "rsa" peuvent être pris en charge par l'outil
ssh-keygen et les serveurs SSH, mais ils peuvent ne pas être pris en charge par
libssh2 utilisé par Zabbix.
:::

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

[comment]: # ({b84f1792-7e6b0273})
##### Formulaire de configuration du shell

Cette étape ne doit être effectuée qu'une seule fois pour chaque hôte qui sera
surveillé par des vérifications SSH.

En utilisant les commandes suivantes, le fichier de clé **publique** peut être installé
sur un hôte distant *10.10.10.10*, afin que les vérifications SSH puissent être effectuées
avec un compte *root* (pour une meilleure lisibilité, les invites de commande sont mises en commentaire) :

```bash
sudo -u zabbix ssh-copy-id root@10.10.10.10
# L'authenticité de l'hôte '10.10.10.10 (10.10.10.10)' ne peut pas être établie.
# L'empreinte de la clé RSA est 38:ba:f2:a4:b5:d9:8f:52:00:09:f7:1f:75:cc:0b:46.
# Êtes-vous sûr de vouloir continuer la connexion (yes/no) ?
yes
# Avertissement : '10.10.10.10' (RSA) a été ajouté de façon permanente à la liste des hôtes connus.
# Mot de passe de root@10.10.10.10 :
<Entrez le mot de passe root>
# Essayez maintenant de vous connecter à la machine avec "ssh 'root@10.10.10.10'",
# et vérifiez que seules les clés que vous vouliez ont été ajoutées.
```

Il est maintenant possible de vérifier la connexion SSH en utilisant la clé privée par défaut
(*/home/zabbix/.ssh/id\_rsa*) pour le compte utilisateur *zabbix* :

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

Si la connexion réussit, alors la partie configuration dans le shell est
terminée et la session SSH distante peut être fermée.

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

[comment]: # ({6dca8e7a-fe23daa8})
##### Configuration d'un élément

La ou les commande(s) réelles à exécuter doivent être placées dans le champ *Executed script*
de la configuration de l'élément.
Plusieurs commandes peuvent être exécutées l'une après l'autre en les plaçant sur une
nouvelle ligne. Dans ce cas, les valeurs renvoyées seront également formatées sur plusieurs lignes.

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

Tous les champs de saisie obligatoires sont marqués d'un astérisque rouge.

Les champs qui nécessitent des informations spécifiques pour les éléments SSH sont :

|Paramètre|Description|Commentaires|
|--|------|------|
|*Type*|Sélectionnez **SSH agent** ici.| |
|*Key*|Clé d'élément unique (par hôte) au format **ssh.run\[unique short description,<ip>,<port>,<encoding>,<ssh options>,<subsystem>\]**|**unique short description** est obligatoire et doit être unique pour chaque élément SSH par hôte.<br><br>Le port par défaut est 22, et non le port spécifié dans l'interface à laquelle cet élément est affecté.<br><br>**ssh options** permet de transmettre des options SSH supplémentaires au format *key1=value1;key2=value2,value3*. Plusieurs valeurs pour une même clé peuvent être transmises en les séparant par une virgule (dans ce cas, le paramètre doit être [entre guillemets](/manual/config/items/item/key#parameter--quoted-string)) ; plusieurs clés d'option peuvent être transmises en les séparant par un point-virgule.<br><br>Les clés d'option suivantes sont prises en charge : `KexAlgorithms`, `HostkeyAlgorithms`, `Ciphers`, `MACs`, `PubkeyAcceptedKeyTypes`. La prise en charge de la clé d'option et de la valeur dépend de la bibliothèque SSH (par exemple, `PubkeyAcceptedKeyTypes` n'est pris en charge qu'avec libssh) ; si une option n'est pas prise en charge, une erreur sera renvoyée et l'élément deviendra non pris en charge.<br><br>Notez que le signe "+" pour ajouter des paramètres de chiffrement et "!" pour désactiver des paramètres de chiffrement spécifiques (comme dans GnuTLS et OpenSSL) n'est pas pris en charge.<br><br>Exemples :<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** permet de transmettre un sous-système SSH, limitant la connexion SSH à des opérations spécifiques autorisées par le sous-système (par exemple, les transferts de fichiers via SFTP ou la gestion d'équipements réseau via NETCONF). Notez que l'utilisation d'un sous-système peut également nécessiter l'utilisation d'une syntaxe de script spécifique dans le paramètre *Executed script*.<br><br>Exemples :<br>=> `ssh.run[SFTPBackup,192.0.2.18,,,,sftp]`<br>=> `ssh.run[Cisco1234,192.0.2.18,,,,netconf]`|
|*Authentication method*|L'une des méthodes « Password » ou « Public key ».| |
|*User name*|Nom d'utilisateur (jusqu'à 255 caractères) pour l'authentification sur l'hôte distant. Obligatoire.| |
|*Public key file*|Nom du fichier de clé publique si *Authentication method* est « Public key ». Obligatoire.|Exemple : *id\_rsa.pub* - nom de fichier de clé publique par défaut généré par une commande [ssh-keygen](http://en.wikipedia.org/wiki/Ssh-keygen).|
|*Private key file*|Nom du fichier de clé privée si *Authentication method* est « Public key ». Obligatoire.|Exemple : *id\_rsa* - nom de fichier de clé privée par défaut.|
|*Password* or<br>*Key passphrase*|Mot de passe (jusqu'à 255 caractères) pour l'authentification ou<br>Phrase secrète **si** elle a été utilisée pour la clé privée.|Laissez le champ *Key passphrase* vide si aucune phrase secrète n'a été utilisée.<br>Voir aussi les [problèmes connus](/manual/installation/known_issues#ssh-checks) concernant l'utilisation de la phrase secrète.|
|*Executed script*|Commande(s) shell exécutée(s) à l'aide d'une session distante SSH.|La valeur de retour de la ou des commande(s) shell exécutée(s) est limitée à 16 Mo (y compris les espaces de fin qui sont tronqués) ; les [limites de la base de données](/manual/config/items/item#item-data-limits) s'appliquent également.<br><br>Notez que la bibliothèque libssh2 peut tronquer les scripts exécutables à \~32kB.<br><br>Exemples :<br>`date +%s`<br>`systemctl status mysql-server`<br>`ps auxww \| grep httpd \| wc -l`<br><br>Exemple (pour le sous-système NETCONF) :<br>`<rpc>`<br>`<get-software-information/>`<br>`</rpc>`<br>`]]>]]>`<br>`<rpc>`<br>`<close-session/>`<br>`</rpc>`<br>`]]>]]>`|

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