Authentifier les utilisateurs exécutant des modules Ansible sur des équipements Junos

Comprendre comment authentifier les utilisateurs lors de l’utilisation de l’ensemble juniper.device de modules de la juniper.device collection Ansible.

Juniper Networks fournit des modules Ansible que vous pouvez utiliser pour gérer les équipements exécutant Junos OS et les équipements exécutant Junos OS Evolved. Les modules Juniper Networks sont distribués via la juniper.device collection. La juniper.device collection comprend deux ensembles de modules :

Cette rubrique explique comment authentifier les utilisateurs lorsque vous utilisez uniquement l’ensemble de juniper.device modules. Pour plus d’informations sur l’utilisation des junipernetworks.junos modules pour se connecter et s’authentifier auprès de Junos appareils, consultez Utiliser les modules juniper.device.junos_* Ansible pour gérer les appareils Junos.

Présentation de l’authentification

Les juniper.device modules vous permettent de vous connecter directement aux équipements Junos et de les gérer à l’aide de SSH, telnet ou d’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 être en mesure d’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 appareils Junos, le moyen le plus pratique d’y accéder est de configurer les clés SSH. Les clés SSH permettent à l’appareil 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 tentent d’abord l’authentification SSH basée sur la juniper.device clé publique, puis essaient l’authentification par mot de passe. Lorsque l’authentification par mot de passe est utilisée, le mot de passe fourni est utilisé comme mot de passe de l’appareil. Lorsque des clés SSH sont utilisées, le mot de passe fourni est la phrase de passe pour déverrouiller la clé privée. Vous n’avez pas besoin de fournir de mot de passe si vous chargez la clé dans un agent d’authentification SSH ou si la clé privée SSH contient une phrase secrète vide. Cependant, nous ne recommandons pas d’utiliser des clés privées SSH avec des phrases de passe vides.

Ansible fournit de nombreuses méthodes pour fournir un mot de passe pour l’authentification par mot de passe ou les clés SSH protégées par mot de passe. Certaines options incluent l’utilisation d’une invite de playbook, la fourniture d’options de ligne de commande ou la création d’un fichier de données chiffré par coffre-fort qui stocke le mot de passe de manière sécurisée. Consultez la documentation officielle d’Ansible pour plus d’informations.

Vous pouvez spécifier les paramètres de connexion et d’authentification des modules de la juniper.device manière suivante. Si vous ne définissez pas explicitement les valeurs, des valeurs par défaut sont utilisées dans certains cas. Les valeurs par défaut sont décrites 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 Comprendre 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, des variables d’hôte ou de groupe ou des arguments de ligne de commande.

  • Fichier de configuration du client SSH : pour les connexions SSH, les modules interrogent automatiquement le fichier de configuration SSH par défaut à ~/.ssh/config, s’il en existe un. Vous pouvez inclure l’option ssh_config permettant de spécifier un fichier de configuration différent. Les modules utilisent tous les paramètres pertinents dans le fichier de configuration SSH pour la connexion donnée, sauf si vous définissez 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.

  • Section Playbook vars: : les juniper.device modules prennent en charge la spécification d’options liées à la connexion et à l’authentification pour les connexions locales et persistantes dans la section d’un jeu, qui est décrite dans la section Comment définir les paramètres d’authentification dans la section vars : pour les connexions locales et persistantesvars:.

Comprendre les valeurs par défaut des modules Juniper Networks

Vous pouvez définir explicitement les paramètres de connexion et d’authentification pour les 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 pour l’ensemble de juniper.device modules. 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.

Tableau 1 : valeurs par défaut et priorité des variables pour les paramètres de connexion

Nom du paramètre

Alias de paramètres

Descriptif

Valeur par défaut et priorité des variables

host

hostname

ip

Nom d’hôte ou adresse IP de l’appareil distant avec lequel la connexion doit être établie.

{{ inventory_hostname }}

passwd

password

Le mot de passe de l’utilisateur ou la phrase secrète de la clé SSH requise pour s’authentifier auprès de l’équipement géré.

  1. ANSIBLE_NET_PASSWORD variable d’environnement

  2. Valeur spécifiée pour -k ou --ask-pass option de ligne de commande

ssh_config

–

Chemin d’accès à un fichier de configuration 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

ssh_private_key_file

ssh_keyfile

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

  1. ANSIBLE_NET_SSH_KEYFILE variable d’environnement

  2. Valeur spécifiée pour --private-key ou --key-file option de ligne de commande

  3. Aucun

user

username

Nom d’utilisateur utilisé pour s’authentifier auprès du nœud géré.

  1. ANSIBLE_NET_USERNAME variable d’environnement

  2. remote_user tel que défini par Ansible

  3. USER variable d’environnement

Lors de l’exécution des modules de Juniper Networks, l’argument host est toujours nécessaire pour une connexion. Cependant, vous n’avez pas besoin de spécifier explicitement l’hôte car il est défini par défaut sur {{ inventory_hostname }}.

Vous pouvez exécuter les modules à l’aide de n’importe quel compte utilisateur ayant accès à l’équipement Junos géré. Les privilèges d’accès au compte utilisateur Junos OS sont appliqués et la classe configurée pour l’utilisateur Junos OS détermine les autorisations. Si vous ne spécifiez pas d’utilisateur, l’utilisateur est défini conformément à l’algorithme décrit dans user le Tableau 1. Consultez la documentation Ansible pour connaître la priorité utilisée pour définir remote_user, qui peut être définie de plusieurs façons, notamment :

  • -u ou --user en ligne de commande

  • ANSIBLE_REMOTE_USER variable d’environnement

  • remote_user paramètre de configuration

Comment définir les paramètres d’authentification dans les vars : Section pour les connexions locales et persistantes

Vous pouvez définir les paramètres de connexion et d’authentification des modules dans la juniper.device section de vars: la pièce. Cette option s’ajoute à la définition des paramètres par d’autres moyens, 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. Cette vars: section vous permet de définir des paramètres de connexion communs dans 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 :

  • Les connexions locales, qui sont définies à l’aide de connection: local

  • Les 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 à 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 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. Cependant, lorsque vous définissez des paramètres dans un jeu pour les connexions persistantes, vous devez définir les paramètres de 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 cette lecture.

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, ce qui établit une connexion à chaque hôte qui persiste pendant l’exécution de toutes les tâches du jeu. La section de la pièce définit les paramètres d’authentification vars: pour la connexion persistante. Les user valeurs et passwd les variables de référence définies dans le vault-vars.yaml fichier de coffre-fort.

Comment authentifier l’utilisateur à l’aide de clés SSH

Les juniper.device modules 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 l’équipement auquel le module se connectera, soit l’équipement Junos géré, soit le serveur de console connecté à l’équipement 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 :

  1. Sur le nœud de contrôle Ansible, générez la paire de clés SSH publique et privée de l’utilisateur et fournissez les options requises, par exemple :
  2. (Facultatif) Chargez la clé dans l’agent de clé SSH natif. Par exemple :
  3. Configurez la clé publique sur chaque équipement auquel les modules se connecteront, ce qui peut inclure des équipements Junos ou un serveur de console connecté à un équipement Junos.

    La méthode la plus simple pour configurer la clé publique sur un équipement Junos consiste à charger un fichier contenant la clé publique sous le compte d’utilisateur approprié.

  4. Vérifiez que la clé fonctionne en vous connectant à l’appareil à l’aide de la clé.

Utiliser des 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 fichier de configuration différent. Les modules utilisent tous les paramètres pertinents dans le fichier de configuration SSH pour la connexion donnée, sauf si vous définissez 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é 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, pour les jeux qui utilisent les juniper.device modules avec une connexion persistante, vous devez définir les paramètres dans la vars: section. Les facteurs suivants déterminent les arguments à inclure dans le guide stratégique :

  • 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

  • Si le fichier de configuration SSH de l’utilisateur définit déjà les paramètres de cet hôte

Les exemples suivants décrivent comment aborder les différents scénarios :

  • Pour vous connecter à un équipement Junos à l’aide de clés SSH activement chargées dans l’agent de clé SSH natif ou qui se trouvent à l’emplacement par défaut et ne sont pas protégées 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 la valeur par défaut.

  • Pour vous connecter à un équipement Junos à l’aide de clés SSH qui ne se trouvent pas à l’emplacement par défaut et qui ne sont pas protégés par mot de passe, définissez l’argument ssh_private_key_file sur le chemin du fichier de clé privée SSH. Par exemple :

    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 lorsque vous exécutez le playbook.

  • Pour vous connecter à un équipement Junos à l’aide d’un fichier de clé SSH protégé par mot de passe, qui est la méthode recommandée, vous pouvez référencer la phrase secrète du fichier de clé SSH de plusieurs façons. Par exemple, vous pouvez utiliser l’argument, définir des passwd variables Ansible ou fournir des options de ligne de commande.

    L’exemple suivant exécute le playbook avec l’option --ask-pass de ligne de commande pour inviter l’utilisateur à saisir la phrase de passe :

    Remarque : 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 appropriée à son environnement. Il est recommandé de demander la phrase de passe lorsque vous exécutez le playbook ou de stocker la variable à l’aide d’un coffre-fort chiffré plutôt que de stocker les informations d’identification dans un format non chiffré.

    Pour plus d’informations sur l’utilisation d’une invite ou d’un fichier de coffre-fort chiffré pour la phrase secrète de 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 chiffré par un coffre-fort Ansible.

Pour obtenir des instructions sur l’utilisation de clés SSH pour se connecter à un serveur de console, consultez Comment s’authentifier via un serveur de console.

Comment authentifier l’utilisateur à l’aide d’un playbook ou d’une invite 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 pour --ask-pass demander le mot de passe. Lorsque des clés SSH sont utilisées, le mot de passe fourni est utilisé comme phrase secrète de 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 de l’utilisateur ou la phrase secrète de la clé SSH :

  1. Incluez du code en dessous vars_prompt: qui demande le mot de passe de l’utilisateur ou la phrase secrète de la clé SSH (et éventuellement le nom d’utilisateur) et stocke la valeur dans une variable.
  2. Définissez les user paramètres et passwd de sorte que chacun référence sa variable respective.
  3. Incluez les tâches à exécuter.
  4. Exécutez le playbook, qui demande le nom d’utilisateur et le mot de passe. Le terminal ne fait pas écho au mot de passe lorsque vous le saisissez car la variable est définie sur private: yes.

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 de passe. Considérons le playbook suivant, qui utilise le nom d’utilisateur par défaut :

Exécutez le playbook et incluez l’option -k de ligne de commande or --ask-pass , qui demande le mot de passe et ne fait pas écho au mot de passe sur la ligne de commande.

Comment authentifier l’utilisateur à l’aide d’un fichier chiffré par Ansible Vault

Vous pouvez utiliser le coffre-fort Ansible pour stocker en toute sécurité des mots de passe 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 le type de connexion Ansible, par exemple, dans la section du jeu ou en tant qu’arguments vars: de module.

Cet exemple utilise le coffre-fort Ansible pour créer et chiffrer un nouveau fichier de coffre-fort. Vous pouvez également chiffrer des variables individuelles ou utiliser plusieurs fichiers chiffrés avec des mots de passe différents. Consultez la documentation officielle d’Ansible pour plus d’informations sur l’utilisation du coffre-fort Ansible pour le chiffrement de contenu et de fichiers.

Pour créer et utiliser un fichier de coffre-fort Ansible contenant les variables requises, y compris les mots de passe :

  1. Créez un fichier de données chiffré par le coffre-fort et spécifiez le mot de passe requis pour chiffrer, déchiffrer, modifier et utiliser le fichier de données.
  2. Définissez les variables requises dans le fichier et enregistrez-le.
  3. Vérifiez que le fichier est chiffré.
  4. Dans le playbook, incluez le fichier de variables chiffrées par le coffre-fort et référencez les variables requises à l’emplacement approprié pour vos modules et votre type de connexion Ansible.
    Remarque :

    Si vous définissez à la place les variables réelles user et passwd dans le coffre, les modules les récupèrent automatiquement et vous n’avez pas besoin de les définir explicitement dans le playbook.

  5. Exécutez le playbook avec l’option --ask-vault-pass , qui demande le mot de passe du coffre-fort.

Comment s’authentifier via un serveur de console

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’authentification du serveur de console et de l’équipement 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 via un serveur de console, vous devez fournir les paramètres suivants dans votre playbook, s’il n’y a 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 console

  • user et passwd: identifiants de connexion Junos OS

  • cs_user: nom d’utilisateur du serveur de console

  • cs_passwd: mot de passe de l’appareil ou phrase secrète du fichier de clé SSH requis pour s’authentifier auprès du serveur de console

  • port: port, s’il diffère de la valeur par défaut

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 de 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 .