Connectez-vous aux équipements Junos à l’aide d’Ansible
Comprendre comment se connecter aux équipements Junos lors de l’utilisation du juniper.device module défini dans 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 :
-
juniper.devicemodules (command, ,factsconfig,file_copy,jsnapyping,srx_clustertablepmtudrpcsoftwaresystem, ) -
junipernetworks.junosModules (juniper.device.junos_*)
Ce document explique comment utiliser l’ensemble de modules uniquement pour se connecter à des juniper.device périphériques Junos à l’aide de différents protocoles et connexions Ansible. Pour plus d’informations sur l’utilisation des junipernetworks.junos modules pour se connecter à Junos appareils, consultez Utiliser les modules juniper.device.junos_* Ansible pour gérer les appareils Junos.
Présentation des méthodes de connexion
Les juniper.device modules vous permettent de vous connecter à un équipement Junos à l’aide d’une connexion SSH, Telnet ou d’une console série. Vous devez utiliser une connexion de console série lorsque votre terminal ou votre ordinateur portable est physiquement connecté au port CONSOLE d’un équipement Junos. Vous pouvez utiliser SSH ou telnet pour vous connecter à l’interface de gestion de l’appareil ou à un serveur de console directement connecté au port CONSOLE de l’appareil.
Les appareils nouveaux ou zeroisés dont la configuration d’usine est conforme aux paramètres d’usine nécessitent un accès via une connexion de console. Ainsi, vous pouvez utiliser Ansible pour configurer initialement un appareil qui n’est pas encore configuré pour l’accès à distance. Vous pouvez utiliser une connexion de console série lorsque vous êtes directement connecté à l’équipement ou vous pouvez utiliser telnet ou SSH via un serveur de console directement connecté à l’équipement.
Par défaut, les juniper.device modules utilisent SSH pour se connecter à un appareil. Pour utiliser une connexion Telnet ou une console série, définissez le mode paramètre sur la valeur appropriée. Pour telnet à un périphérique, définissez l’argument mode sur telnet. Pour utiliser une connexion de console série, définissez l’argument mode sur serial. Le Tableau 1 récapitule les modes de connexion, leurs valeurs par défaut pour certains paramètres et toute configuration requise de Junos OS. Les juniper.device modules prennent en charge tous les modes de connexion.
|
Mode de connexion |
Valeur de l’argument |
Port par défaut |
Configuration requise de Junos OS |
|---|---|---|---|
|
NETCONF sur SSH (par défaut) |
– |
830 |
[edit system services]
netconf {
ssh;
}
|
|
Connexion de console série |
|
/dev/ttyUSB0 |
– |
|
SSH via un serveur de console |
– |
22 |
– |
|
Telnet vers un appareil Junos |
|
23 |
[edit system services] telnet; |
|
Telnet via un serveur de console |
|
23 |
– |
Avant de pouvoir accéder à l’interface de gestion à l’aide de telnet ou NETCONF sur SSH, vous devez d’abord activer le service approprié au niveau de la [edit system services] hiérarchie. Étant donné que telnet utilise des mots de passe en clair (créant ainsi une vulnérabilité de sécurité potentielle), nous vous recommandons d’utiliser SSH.
Lorsque vous utilisez les juniper.device modules pour gérer un équipement Junos, l’équipement distant doit être en mesure d’authentifier l’utilisateur Ansible à l’aide d’informations d’identification appropriées pour le protocole donné. Pour plus d’informations, consultez Authentifier les utilisateurs exécutant des modules Ansible sur des équipements Junos.
Les juniper.device modules prennent en charge différentes connexions Ansible lors de la connexion aux équipements Junos, y compris les connexions locales (par tâche) et les connexions persistantes (par jeu). La connexion Ansible détermine si Ansible établit une connexion distincte à l’hôte pour chaque tâche de la lecture ou s’il établit une connexion unique à un hôte qui persiste sur toutes les tâches de la lecture. Pour plus d’informations sur la spécification de la connexion Ansible, consultez Présentation des connexions Ansible locales et persistantes.
Comprendre les connexions Ansible locales et persistantes
Les juniper.device modules ne nécessitent pas Python sur les équipements Junos, car ils utilisent Junos PyEZ et l’API XML de Junos sur NETCONF pour s’interfacer avec l’équipement. Par conséquent, pour effectuer des opérations sur des équipements Junos, vous devez exécuter des modules localement sur le nœud de contrôle Ansible, sur lequel Python est installé. Vous pouvez exécuter les modules localement en les incluant connection: local dans le playbook playbook. Lorsque vous utilisez connection: local, Ansible établit une connexion distincte à l’hôte pour chaque tâche de la lecture qui effectue des opérations sur l’hôte.
Les juniper.device modules prennent également en charge connection: juniper.device.pyez l’établissement d’une connexion persistante à un hôte. Lorsque vous utilisez une connexion persistante, Ansible exécute toujours les modules localement sur le nœud de contrôle. Cependant, la connexion persistante établit et maintient une connexion unique à chaque hôte, qui persiste tout au long de l’exécution de toutes les tâches du jeu. Une connexion persistante peut être plus efficace pour exécuter plusieurs tâches que d’utiliser une connexion distincte à l’hôte pour chaque tâche de la lecture.
Le Tableau 2 résume les connexions Ansible pour les modules de l’ensemble de juniper.device modules.
|
Connexion Ansible |
Descriptif |
|---|---|
|
|
Exécutez les modules localement sur le nœud de contrôle Ansible, mais établissez une connexion distincte à un hôte pour chaque tâche du jeu qui effectue des opérations sur l’hôte. |
|
|
Exécutez les modules localement sur le nœud de contrôle Ansible, mais établissez une connexion persistante à un hôte qui persiste pendant l’exécution de toutes les tâches du jeu. |
Vous pouvez définir des paramètres de connexion et d’authentification pour les connexions locales et persistantes dans le playbook. Les connexions locales établissent une connexion distincte à un hôte pour chaque tâche. Ainsi, vous pouvez définir les paramètres de connexion et d’authentification des connexions locales dans la section de vars: la pièce et dans la liste d’arguments d’un module. Les arguments de module sont prioritaires. En revanche, les connexions persistantes ont une seule connexion pour toutes les tâches du jeu. Ainsi, vous devez définir les paramètres de connexion et d’authentification pour les connexions persistantes globalement vars: dans la section de la pièce.
Le playbook suivant établit une connexion persistante à chaque hôte qui est utilisée pour toutes les tâches du play. Les informations d’identification de l’utilisateur, qui sont stockées dans un fichier de coffre-fort Ansible, sont définies globalement vars: dans la section du jeu.
---
- name: Get Device Information
hosts: dc1
connection: juniper.device.pyez
gather_facts: no
vars:
host: "{{ inventory_hostname }}"
user: "{{ vault_admin_username }}"
passwd: "{{ vault_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 }}"
Se connecter à un appareil via SSH
Les juniper.device modules prennent en charge l’utilisation de SSH pour se connecter à un équipement Junos. Vous pouvez établir une session NETCONF sur SSH sur l’interface de gestion de l’appareil. Vous pouvez également établir une connexion SSH avec un serveur de console directement connecté au port CONSOLE de l’appareil. Le serveur SSH doit être en mesure d’authentifier l’utilisateur à l’aide des mécanismes d’authentification SSH standard, comme décrit dans Authentifier les utilisateurs exécutant des modules Ansible sur des équipements Junos. Pour établir une session NETCONF sur SSH, vous devez également satisfaire aux exigences décrites dans la section Configurer Ansible pour les nœuds gérés par Junos OS.
Les modules interrogent automatiquement le fichier de configuration SSH par défaut à ~/.ssh/config, s’il en existe un. Vous pouvez également inclure le ssh_config paramètre pour spécifier un fichier de configuration différent.
Pour les connexions SSH à un équipement Junos ou à un serveur de console connecté à l’équipement, les modules tentent d’abord l’authentification SSH basée sur la 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 de clé SSH ou si la clé privée SSH contient une phrase de passe vide. Cependant, nous ne recommandons pas d’utiliser des clés privées SSH avec des phrases de passe vides.
Le playbook suivant établit une session NETCONF sur SSH avec un équipement Junos et récupère les informations actuelles sur l’équipement. Le playbook utilise des clés SSH qui sont chargées dans un agent de clé SSH.
---
- name: Get Device Facts
hosts: dc1
connection: local
gather_facts: no
tasks:
- name: Retrieve facts from Junos devices
juniper.device.facts:
savedir: "{{ playbook_dir }}"
- name: Print version
ansible.builtin.debug:
var: junos.version
Les modules vous permettent également de vous connecter à un équipement Junos via une connexion SSH à un serveur de console. Dans ce cas, vous devez spécifier les identifiants de connexion pour le périphérique Junos et le serveur de console. Utilisez les user paramètres et passwd pour spécifier les identifiants de connexion de Junos OS. Utilisez les paramètres et cs_passwd pour spécifier les informations d’identification du serveur de cs_user console. Lorsque des clés SSH sont utilisées, cs_passwd est la phrase de passe de la clé privée. De plus, définissez l’argument port sur le port TCP qui correspond à l’appareil TTY, le cas échéant.
Le playbook suivant demande les informations d’identification de l’utilisateur pour le serveur de console et l’équipement Junos. Le module s’authentifie auprès du serveur de console, puis de l’équipement Junos. Si l’authentification réussit, le playbook récupère les informations sur l’équipement à partir du nœud géré et imprime la version de Junos OS.
---
- name: Get Device Facts
hosts: dc1_con
connection: local
gather_facts: no
vars_prompt:
- name: "CS_USER"
prompt: "Console server username"
private: no
- name: "CS_PASSWORD"
prompt: "Console server password"
private: yes
- name: "JUNOS_USER"
prompt: "Junos OS username"
private: no
- name: "JUNOS_PASSWORD"
prompt: "Junos OS password"
private: yes
vars:
cs_user: "{{ CS_USER }}"
cs_passwd: "{{ CS_PASSWORD }}"
user: "{{ JUNOS_USER }}"
passwd: "{{ JUNOS_PASSWORD }}"
port: 3007
tasks:
- name: Retrieve facts from Junos devices
juniper.device.facts:
savedir: "{{ playbook_dir }}"
- name: Print version
ansible.builtin.debug:
var: junos.version
Les modules Juniper Networks interrogent automatiquement le fichier de configuration client SSH par défaut à l’adresse ~/.ssh/config, s’il existe. Vous pouvez utiliser un autre fichier de configuration SSH en incluant le ssh_config paramètre et en spécifiant l’emplacement du fichier de configuration. Par exemple :
---
- name: Get Device Facts
hosts: dc1
connection: local
gather_facts: no
vars:
ssh_config: "/home/admin/.ssh/config_dc"
tasks:
- name: Retrieve facts from Junos devices
juniper.device.facts:
savedir: "{{ playbook_dir }}"
- name: Print version
ansible.builtin.debug:
var: junos.version
Connectez-vous à un appareil à l’aide de Telnet
Les juniper.device modules vous permettent de vous connecter à un équipement Junos à l’aide de telnet, qui fournit un accès non chiffré à l’équipement réseau. Vous pouvez contacter l’interface de gestion de l’appareil ou un serveur de console directement connecté au port CONSOLE de l’appareil. L’accès à l’appareil par le biais d’un serveur de console vous permet de configurer initialement un nouvel équipement ou un équipement zeroisé qui n’est pas encore configuré pour l’accès à distance. Pour utiliser Telnet vers l’interface de gestion, vous devez configurer le service Telnet au niveau de la [edit system services] hiérarchie sur tous les périphériques qui ont besoin d’accéder à l’interface.
Pour telnet vers le périphérique distant, définissez le mode paramètre sur telnet et incluez-le port éventuellement pour spécifier un port. Lorsque vous définissez mode sur telnet mais omettez le port paramètre, la valeur par défaut de port est 23. Pour les connexions persistantes, définissez mode et port sous la vars: section. Pour les connexions locales, vous pouvez définir les paramètres soit sous la section, soit en tant qu’arguments vars: de module.
Le playbook suivant connecte un équipement Junos à l’aide du port 7016, récupère les informations relatives à l’équipement et les enregistre dans un fichier. Le playbook demande le nom d’utilisateur et le mot de passe.
---
- name: Get Device Facts
hosts: dc1
connection: local
gather_facts: no
vars_prompt:
- name: "DEVICE_USERNAME"
prompt: "Device username"
private: no
- name: "DEVICE_PASSWORD"
prompt: "Device password"
private: yes
vars:
user: "{{ DEVICE_USERNAME }}"
passwd: "{{ DEVICE_PASSWORD }}"
mode: telnet
port: 7016
tasks:
- name: Retrieve facts from Junos devices
juniper.device.facts:
savedir: "{{ playbook_dir }}"
- name: Print version
ansible.builtin.debug:
var: junos.version
Se connecter à un appareil à l’aide d’une connexion de console série
Les juniper.device modules vous permettent de vous connecter à un équipement Junos à l’aide d’une connexion de console série, ce qui est utile lorsque vous devez configurer initialement un nouvel équipement qui n’est pas encore configuré pour l’accès à distance. Pour utiliser cette méthode de connexion, votre terminal ou votre ordinateur portable doit être physiquement connecté à l’équipement Junos via le port CONSOLE . Pour obtenir des instructions détaillées sur la connexion au port CONSOLE d’un équipement Junos, reportez-vous à la documentation matérielle de votre équipement spécifique.
Pour vous connecter à un équipement Junos via une connexion de console série, définissez le paramètre du mode module sur serial, et incluez éventuellement le port paramètre pour spécifier un port. Lorsque vous définissez mode sur serial mais omettez le port paramètre, la valeur par défaut de /dev/ttyUSB0port est . Pour les connexions persistantes, définissez mode et port sous la vars: section. Pour les connexions locales, vous pouvez définir les paramètres soit sous la section, soit en tant qu’arguments vars: de module.
Le playbook suivant se connecte à un équipement Junos via le port CONSOLE , puis charge et valide une configuration initiale. Le playbook demande le nom d’utilisateur et le mot de passe.
---
- name: Load Initial Configuration
hosts: dc1
connection: local
gather_facts: no
vars_prompt:
- name: "DEVICE_USERNAME"
prompt: "Device username"
private: no
- name: "DEVICE_PASSWORD"
prompt: "Device password"
private: yes
tasks:
- name: Load initial configuration and commit
juniper.device.config:
user: "{{ DEVICE_USERNAME }}"
passwd: "{{ DEVICE_PASSWORD }}"
mode: serial
load: merge
src: "configs/junos.conf"
register: response
- name: Print the response
ansible.builtin.debug:
var: response