- play_arrow Démenti
- play_arrow Présentation d’Ansible
- play_arrow Installer Ansible pour Junos OS
- play_arrow Utiliser Ansible pour gérer les opérations sur les équipements
- Utiliser Ansible pour récupérer des faits à partir d’équipements Junos
- Utiliser Ansible pour exécuter des commandes et des RPC sur des équipements Junos
- Utiliser Ansible pour transférer des fichiers vers ou depuis des équipements Junos
- Utiliser Ansible avec les tables Junos PyEZ pour récupérer des informations opérationnelles à partir d’équipements Junos
- Utiliser Ansible pour arrêter, redémarrer ou arrêter des équipements Junos
- Utiliser Ansible pour installer des logiciels sur les équipements Junos
- Utiliser Ansible pour restaurer les paramètres de configuration par défaut d’un équipement Junos
- Utiliser Junos Snapshot Administrator en Python (JSNAPy) dans les playbooks Ansible
- play_arrow Utiliser Ansible pour gérer la configuration
- play_arrow Dépannage d’Ansible pour Junos OS
- Résumé du dépannage d’Ansible pour Junos OS
- Dépannage des erreurs d’installation de Junos PyEZ (junos-eznc) pour les modules Ansible
- Dépannage des erreurs de collecte et de module Ansible lors de la gestion des équipements Junos
- Résoudre les erreurs de connexion Ansible lors de la gestion des équipements Junos
- Résoudre les erreurs d’authentification Ansible lors de la gestion des équipements Junos
- Résoudre les erreurs Ansible lors de la configuration des équipements Junos
Authentifier les utilisateurs exécutant des modules Ansible sur des équipements Junos
Vue d’ensemble de l’authentification
Juniper Networks fournit des modules Ansible que vous pouvez utiliser pour gérer les équipements Junos. Les modules Juniper Networks sont distribués via la juniper.device
collection, qui est hébergée sur Ansible Galaxy.
Les modules Juniper Networks vous permettent de vous connecter directement aux équipements Junos et de les gérer via SSH, telnet ou une connexion de console série. Les modules prennent également en charge la connexion à l’appareil via une connexion SSH ou telnet à un serveur de console connecté au port de CONSOLE
l’appareil. L’équipement distant doit pouvoir authentifier l’utilisateur à l’aide d’un mot de passe ou d’autres mécanismes d’authentification SSH standard, en fonction du protocole de connexion.
Lorsque vous utilisez Ansible pour gérer des équipements Junos, le moyen le plus pratique d’y accéder est de configurer les clés SSH. Les clés SSH permettent à l’équipement distant d’identifier les utilisateurs de confiance. Vous pouvez également fournir un nom d’utilisateur et un mot de passe lorsque vous exécutez des modules et des playbooks.
Pour les connexions SSH, les modules Juniper Networks tentent d’abord l’authentification SSH par clé publique, puis l’authentification par mot de passe. Lorsque des clés SSH sont utilisées, le mot de passe fourni est utilisé comme phrase secrète pour déverrouiller la clé SSH privée. Lorsque l’authentification par mot de passe est utilisée, le mot de passe fourni est utilisé comme mot de passe de l’appareil. Si l’authentification par clé publique SSH est utilisée et que la clé privée SSH a une phrase secrète vide, un mot de passe n’est pas requis. Toutefois, nous vous déconseillons d’utiliser des clés privées SSH avec des phrases de passe vides. Pour récupérer un mot de passe pour l’authentification par mot de passe ou des clés SSH protégées par mot de passe, vous pouvez demander le mot de passe à partir du playbook ou de la ligne de commande, ou vous pouvez créer un fichier de données chiffré dans le coffre-fort qui stocke le mot de passe de manière sécurisée.
Vous pouvez spécifier les paramètres de connexion et d’authentification des modules Juniper Networks comme suit. Si vous ne définissez pas explicitement les valeurs, des valeurs par défaut sont utilisées dans certains cas, comme décrit dans Présentation des valeurs par défaut des modules Juniper Networks. Si vous définissez la valeur d’un paramètre à plusieurs endroits, Ansible sélectionne la valeur en fonction de la priorité des variables, comme indiqué dans Présentation de la priorité des variables dans la documentation officielle d’Ansible.
Variables Ansible : vous pouvez spécifier les valeurs des paramètres de connexion et d’authentification à l’aide de variables Ansible normales, par exemple, des variables définies dans des fichiers d’inventaire ou de coffre-fort, dans des variables d’hôte ou de groupe, ou à l’aide d’options de ligne de commande.
Fichier de configuration du client SSH : pour les connexions SSH, les modules Juniper Networks interrogent automatiquement le fichier de configuration SSH par défaut à l’adresse ~/.ssh/config, s’il en existe un. Vous pouvez également inclure la
ssh_config
possibilité de spécifier un autre fichier de configuration. Les modules utilisent tous les paramètres pertinents dans le fichier de configuration SSH pour la connexion donnée, à moins que vous ne définissiez explicitement des variables qui remplacent le paramètre.Arguments de module : les
juniper.device
modules prennent en charge la spécification d’options de connexion et d’authentification pour les connexions locales (connection: local
) en tant qu’arguments de module de niveau supérieur.vars:
section : lesjuniper.device
modules prennent en charge la spécification des options de connexion et d’authentification pour les connexions locales et persistantesvars:
dans la section d’une pièce, qui est décrite dans Comment définir les paramètres d’authentification dans la section vars : Local and Persistent Connections.
Ce document traite des différents aspects de l’authentification lors de l’utilisation des modules Juniper Networks pour gérer les équipements Junos.
Comprendre les valeurs par défaut des modules Juniper Networks
Vous pouvez définir explicitement les paramètres de connexion et d’authentification des modules qui gèrent les équipements Junos. Si vous ne définissez pas de paramètre, le module utilise une valeur par défaut dans certains cas. Le Tableau 1 présente les valeurs par défaut et la priorité des variables pour les paramètres de connexion communs aux modules de la juniper.device
collection. Pour plus d’informations sur les arguments acceptés pour les modules individuels, consultez la documentation de référence de l’API pour ce module.
Nom du paramètre | Alias de paramètres | Description | Valeur par défaut et priorité des variables |
---|---|---|---|
|
| Nom d’hôte ou adresse IP de l’équipement distant avec lequel la connexion doit être établie. |
|
|
| Mot de passe de l’utilisateur ou phrase secrète de clé SSH utilisé pour s’authentifier auprès de l’appareil géré. |
|
| – | Chemin d’accès au fichier de configuration d’un client SSH. Si vous omettez ce paramètre, les modules utilisent le fichier de configuration SSH à l’emplacement par défaut, s’il en existe un. | ~/.ssh/config |
|
| Chemin d’accès au fichier de clé privée SSH utilisé pour s’authentifier auprès de l’appareil distant. Si vous ne spécifiez pas explicitement le chemin d’accès et qu’aucune valeur par défaut n’est trouvée, le module utilise le fichier de clé privée SSH spécifié dans la configuration SSH de l’utilisateur ou la valeur par défaut spécifique au système d’exploitation. |
|
|
| Nom d’utilisateur utilisé pour s’authentifier auprès du nœud géré. |
|
Lors de l’exécution de modules Juniper Networks, l’argument host
est toujours requis pour une connexion. Toutefois, il n’est pas nécessaire de spécifier explicitement l’hôte, car la valeur par défaut est {{ inventory_hostname }}
.
Vous pouvez exécuter des modules Juniper Networks à l’aide de n’importe quel compte utilisateur ayant accès à l’équipement Junos géré. Lorsque vous exécutez les modules, les privilèges d’accès au compte d’utilisateur Junos OS sont appliqués et la classe configurée pour le compte d’utilisateur Junos OS détermine les autorisations. Si vous ne spécifiez pas d’utilisateur, celui-ci est défini selon l’algorithme décrit user
dans le Tableau 1. Consultez la documentation Ansible pour connaître la priorité utilisée pour définir remote_user
, qui peut être défini de plusieurs façons, notamment :
-u
ou--user
sur la ligne de commandeANSIBLE_REMOTE_USER
variable d’environnementremote_user
Paramètre de configuration
Définition des paramètres d’authentification dans les variables : section pour les connexions locales et persistantes
Vous pouvez définir des paramètres de connexion et d’authentification vars:
pour les juniper.device
modules de la section de la pièce. Cela s’ajoute à leur définition comme vous le feriez normalement via d’autres variables, par exemple, dans le fichier de configuration SSH, dans le fichier d’inventaire Ansible, en tant qu’arguments de ligne de commande ou en tant qu’arguments de module. La vars:
section vous permet de définir des paramètres de connexion communs à un emplacement unique que tous les modules du jeu peuvent utiliser pour se connecter à un hôte. De plus, certaines connexions Ansible nécessitent l’utilisation de la vars:
section lorsque vous définissez les paramètres dans la lecture, comme décrit ici.
Les juniper.device
modules prennent en charge les types de connexions Ansible suivants :
connexions locales, qui sont définies à l’aide de
connection: local
connexions persistantes, qui sont définies à l’aide de
connection: juniper.device.pyez
Pour les connexions locales et persistantes, Ansible exécute les modules localement sur le nœud de contrôle. Lorsque vous utilisez connection: local
, Ansible établit une connexion distincte avec l’hôte pour chaque tâche du jeu qui nécessite une connexion. En revanche, lorsque vous utilisez connection: juniper.device.pyez
, Ansible établit une connexion unique et persistante à un hôte, qui persiste pendant l’exécution de toutes les tâches du jeu.
Vous utilisez les mêmes paramètres de connexion et d’authentification pour les connexions persistantes que pour les connexions locales, et les valeurs de paramètre par défaut décrites dans Présentation des valeurs par défaut des modules Juniper Networks s’appliquent aux deux types de connexions. Pour les connexions locales, vous pouvez définir les paramètres de connexion et d’authentification soit dans la vars:
section, soit en tant qu’arguments de module. Si vous définissez les paramètres aux deux endroits, les arguments du module sont prioritaires. Toutefois, lorsque vous définissez des paramètres dans une lecture pour les connexions persistantes, vous devez définir les paramètres dans la vars:
section. Avec les connexions persistantes, il n’y a qu’une seule connexion pour toutes les tâches, et vous devez donc définir les paramètres globalement afin qu’ils s’appliquent à toutes les tâches de ce jeu.
Le playbook suivant exécute deux juniper.device
modules sur chaque hôte du groupe d’inventaire. Le jeu définit la connexion Ansible comme juniper.device.pyez
, qui établit une connexion à chaque hôte qui persiste pendant l’exécution de toutes les tâches du jeu. Les paramètres d’authentification de la connexion persistante sont définis dans la section du vars:
jeu. Les user
variables de référence et passwd
values définies dans le fichier de vault-vars.yaml
coffre-fort.
--- - name: Get Device Facts hosts: dc1 connection: juniper.device.pyez gather_facts: no vars: user: "{{ admin_username }}" passwd: "{{ admin_password }}" vars_files: - vault-vars.yaml tasks: - name: Retrieve facts from Junos devices juniper.device.facts: savedir: "{{ playbook_dir }}" - name: Get hardware inventory juniper.device.command: commands: "show chassis hardware" dest_dir: "{{ playbook_dir }}"
Comment authentifier l’utilisateur à l’aide de clés SSH
Les modules Juniper Networks juniper.device
vous permettent d’utiliser des clés SSH pour vous connecter à un équipement Junos ou à un serveur de console connecté à l’équipement. Pour authentifier un utilisateur à l’aide de clés SSH, générez d’abord les clés sur le nœud de contrôle Ansible, puis configurez les clés sur le périphérique auquel le module se connectera, soit le périphérique Junos géré, soit le serveur de console connecté au périphérique Junos.
Générer et configurer les clés SSH
Pour générer des clés SSH sur le nœud de contrôle Ansible et configurer la clé publique sur l’équipement distant :
Utiliser les clés SSH dans les playbooks Ansible
Après avoir généré la paire de clés SSH et configuré la clé publique sur l’appareil distant, vous pouvez utiliser la clé pour vous connecter à l’appareil. Les modules Juniper Networks interrogent automatiquement le fichier de configuration SSH par défaut à l’adresse ~/.ssh/config, s’il en existe un. Vous pouvez également définir l’option ssh_config
permettant de spécifier un autre fichier de configuration. Les modules utilisent tous les paramètres pertinents dans le fichier de configuration SSH pour la connexion donnée, à moins que vous ne définissiez explicitement des variables qui remplacent le paramètre. De plus, les modules recherchent automatiquement les clés à l’emplacement par défaut et les clés qui sont activement chargées dans un agent de clés SSH.
Pour définir des paramètres spécifiques pour les clés SSH, vous pouvez inclure les arguments appropriés dans votre playbook Ansible. Définissez les arguments à l’emplacement approprié pour votre ensemble de modules et votre connexion Ansible, par exemple, dans la vars:
section des lectures qui utilisent les juniper.device
modules avec une connexion persistante. Les arguments à inclure sont déterminés par l’emplacement de la clé, si la clé est activement chargée dans un agent de clé SSH, si la clé est protégée par un mot de passe et si le fichier de configuration SSH de l’utilisateur définit déjà les paramètres pour cet hôte.
Pour vous connecter à un équipement Junos à l’aide de clés SSH qui sont activement chargées dans l’agent de clé SSH natif ou qui se trouvent à l’emplacement par défaut et ne disposent pas d’une protection par mot de passe, vous n’avez pas besoin de définir d’arguments liés à la connexion ou à l’authentification, sauf s’ils diffèrent de ceux par défaut.
content_copy zoom_out_mapjuniper.device.facts: savedir: "{{ playbook_dir }}"
Pour vous connecter à un périphérique Junos à l’aide de clés SSH qui ne se trouvent pas à l’emplacement par défaut et qui ne sont pas protégées par mot de passe, définissez l’argument
ssh_private_key_file
sur le chemin d’accès au fichier de clé privée SSH. Par exemple:content_copy zoom_out_mapvars: ssh_private_key_file: "/home/user/.ssh/id_rsa_alternate" tasks: - name: Retrieve facts from Junos devices juniper.device.facts: savedir: "{{ playbook_dir }}"
Vous pouvez également spécifier le chemin de la clé privée SSH en le définissant dans le fichier de configuration SSH ; en définissant la variable d’environnement
ANSIBLE_NET_SSH_KEYFILE
ou en définissant l’option--private-key
de ligne de commande ou--key-file
lors de l’exécution du playbook.Pour vous connecter à un équipement Junos à l’aide d’un fichier de clé SSH protégé par mot de passe, ce qui est la méthode recommandée, vous pouvez référencer la phrase secrète du fichier de clé SSH dans l’argument
passwd
ou fournir le mot de passe à l’aide de variables Ansible normales ou d’options de ligne de commande.Il est de la responsabilité de l'utilisateur d'obtenir la phrase secrète du fichier de clé SSH d'une manière sécurisée et adaptée à son environnement. Il est recommandé de l’inviter lors de chaque appel du playbook ou de stocker les variables à l’aide d’un coffre-fort chiffré plutôt que de stocker les informations d’identification dans un format non chiffré. Par exemple, vous pouvez exécuter le playbook à l’aide de l’option
--ask-pass
de ligne de commande et fournir la phrase secrète du fichier de clé SSH lorsque vous y êtes invité, comme indiqué ici :content_copy zoom_out_mapvars: ssh_private_key_file: "/home/user/.ssh/id_rsa_dc" tasks: - name: Retrieve facts from Junos devices juniper.device.facts: savedir: "{{ playbook_dir }}"
content_copy zoom_out_mapuser@localhost:~$ ansible-playbook playbook.yaml --ask-pass SSH password:
Pour plus d’informations sur l’utilisation d’une invite ou d’un fichier de coffre-fort chiffré pour la phrase secrète de la clé SSH, consultez Comment authentifier l’utilisateur à l’aide d’un playbook ou d’une invite de mot de passe de ligne de commande et Comment authentifier l’utilisateur à l’aide d’un fichier Ansible Vault-Encrypted .
Pour obtenir des instructions sur l’utilisation des clés SSH pour se connecter à un serveur de consoles, reportez-vous à la section Comment s’authentifier via un serveur de consoles.
Comment authentifier l’utilisateur à l’aide d’un playbook ou d’une invite de mot de passe de ligne de commande
Pour authentifier un utilisateur exécutant des modules Ansible, vous pouvez demander les informations d’identification de l’utilisateur lors de l’exécution du playbook. Par exemple, vous pouvez définir une invite interactive dans le playbook, ou vous pouvez exécuter le playbook avec l’option -k
de ligne de commande ou --ask-pass
pour demander le mot de passe. Lorsque des clés SSH sont utilisées, le mot de passe fourni est utilisé comme phrase secrète pour déverrouiller la clé SSH privée. Lorsque l’authentification par mot de passe est utilisée, le mot de passe fourni est utilisé comme mot de passe de l’appareil.
Pour définir une invite interactive dans le playbook afin d’obtenir le mot de passe ou la phrase secrète de la clé SSH de l’utilisateur :
Vous pouvez également exécuter un playbook avec l’option -k
de ligne de commande ou --ask-pass
pour demander le mot de passe ou la phrase secrète. Prenons l’exemple du guide suivant, qui utilise le nom d’utilisateur par défaut :
--- - name: Get Device Facts hosts: all connection: local gather_facts: no tasks: - name: Retrieve facts from Junos devices juniper.device.facts: savedir: "{{ playbook_dir }}" - name: Print facts ansible.builtin.debug: var: junos.version
Exécutez le playbook et incluez l’option -k
de ligne de commande ou --ask-pass
qui invite à entrer le mot de passe et ne fait pas écho au mot de passe sur la ligne de commande.
user@localhost:~$ ansible-playbook playbook.yaml --ask-pass SSH password: PLAY [Get Device Facts] *********************************************** ...
Comment authentifier l’utilisateur à l’aide d’un fichier Ansible Vault-Encrypted
Vous pouvez créer un coffre-fort Ansible qui stocke en toute sécurité les mots de passe enregistrés et d’autres valeurs sensibles de connexion et d’authentification dans un fichier de données chiffré par le coffre-fort. Votre playbook peut ensuite référencer ces variables à l’emplacement approprié pour votre ensemble de modules et votre type de connexion Ansible, par exemple, dans la section du jeu ou en tant qu’arguments de vars:
module.
Pour créer et utiliser un fichier de coffre-fort Ansible contenant les variables requises, y compris les mots de passe :
Comment s’authentifier via un serveur de consoles
Les modules Ansible de Juniper Networks peuvent se connecter aux équipements Junos via un serveur de console. Pour les connexions SSH via un serveur de console, vous devez fournir les informations d’identification d’authentification du serveur de consoles et du périphérique Junos. Vous pouvez utiliser un mot de passe de périphérique ou un fichier de clé SSH protégé par mot de passe pour l’authentification du serveur de console.
Pour vous connecter à un équipement Junos par le biais d’un serveur de consoles, vous devez fournir les paramètres suivants dans votre playbook, s’il n’existe pas de valeur par défaut ou si la valeur par défaut n’est pas appropriée :
host
: nom d’hôte ou adresse IP du serveur de consolesuser
etpasswd
—identifiants de connexion Junos OScs_user
—Nom d’utilisateur du serveur de consolescs_passwd
: mot de passe de l’équipement ou mot de passe du fichier de clé SSH requis pour s’authentifier auprès du serveur de consoles
Dans l’exemple suivant, les informations d’identification de l’utilisateur Junos OS et de l’utilisateur du serveur de console sont définies dans un fichier de coffre-fort Ansible. Les variables du coffre-fort sont ensuite référencées dans le playbook. Dans ce cas, l’argument cs_passwd
est la phrase secrète de la clé SSH spécifiée dans l’argument ssh_private_key_file
.
--- - name: Get Device Facts hosts: dc1_con connection: local gather_facts: no vars_files: - vault-vars.yaml vars: host: "{{ inventory_hostname }}" user: "{{ junos_username }}" passwd: "{{ junos_password }}" cs_user: "{{ cs_username }}" cs_passwd: "{{ cs_key_password }}" ssh_private_key_file: "/home/user/.ssh/id_rsa_dc" tasks: - name: Retrieve facts from Junos devices juniper.device.facts: savedir: "{{ playbook_dir }}"