Authentifier les utilisateurs de Junos PyEZ
Les applications Junos PyEZ peuvent authentifier les utilisateurs à l’aide d’un mot de passe ou d’autres mécanismes d’authentification SSH standard.
Présentation de l’authentification utilisateur Junos PyEZ
Junos PyEZ vous permet de vous connecter directement aux équipements Junos et de les gérer à l’aide d’une connexion de console série, de Telnet ou d’une session NETCONF sur SSH. Junos PyEZ prend également en charge la connexion à un appareil via une connexion telnet ou SSH à un serveur de console connecté au port de CONSOLE l’équipement. De plus, Junos PyEZ peut se connecter à un équipement par le biais d’un équipement intermédiaire, tel qu’un bastion ou un hôte de saut.
Les appareils distants doivent être en mesure d’authentifier l’utilisateur à l’aide d’un mot de passe ou d’autres mécanismes d’authentification SSH standard, selon la méthode de connexion. Lorsque vous gérez des équipements Junos via une connexion SSH, le moyen le plus pratique et le plus sûr d’accéder à un équipement consiste à configurer les clés SSH. Les clés SSH permettent à l’appareil distant d’identifier les utilisateurs de confiance.
Vous pouvez effectuer des opérations sur l’appareil à l’aide de n’importe quel compte utilisateur ayant accès à l’équipement Junos géré. Vous pouvez définir explicitement l’utilisateur lors de la création d’une nouvelle instance de la jnpr.junos.device.Device classe. Si vous ne spécifiez pas d’utilisateur, l’utilisateur utilise par défaut la valeur de la $USER variable d’environnement.
Pour les connexions SSH, Junos PyEZ interroge automatiquement le fichier de configuration SSH par défaut à l’adresse ~/.ssh/config, s’il en existe un. Vous pouvez également inclure ssh_config dans la liste des Device arguments pour spécifier un fichier de configuration différent. Junos PyEZ utilise tous les paramètres pertinents du fichier de configuration SSH qui ne sont pas remplacés par les arguments de la Device liste d’arguments, tels que l’utilisateur ou le fichier d’identité.
Lorsque SSH est utilisé pour se connecter à un équipement, Junos PyEZ tente d’abord l’authentification SSH basée sur la clé publique, puis tente 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.
Obtenez vos identifiants de manière sécurisée et adaptée à votre environnement. Il est recommandé de demander des informations d’identification chaque fois que vous exécutez le script au lieu de les stocker dans un format non chiffré.
Les sections suivantes présentent les différentes méthodes d’authentification.
Authentifier les utilisateurs de Junos PyEZ à l’aide d’un mot de passe
Pour authentifier un utilisateur Junos PyEZ à l’aide d’un mot de passe :
Authentifier les utilisateurs de Junos PyEZ à l’aide de clés SSH
Pour utiliser des clés SSH dans une application Junos PyEZ, vous devez d’abord générer les clés sur le serveur de gestion de la configuration. Configurez ensuite la clé publique sur chaque équipement auquel le client Junos PyEZ se connectera. Les équipements peuvent inclure un périphérique Junos, un serveur de console, un bastion ou un hôte de saut. Pour utiliser les clés, vous devez inclure les arguments appropriés dans la liste des Device arguments.
Junos PyEZ peut utiliser des clés SSH qui sont activement chargées dans un agent de clé SSH, des clés générées à l’emplacement par défaut ou à un emplacement défini par l’utilisateur, et des clés qui utilisent ou renoncent à la protection par mot de passe. Si les Device arguments ne spécifient pas de mot de passe ou ne font pas référence à un fichier de clé SSH, Junos PyEZ vérifie d’abord les clés SSH qui sont activement chargées dans l’agent de clé SSH, puis recherche les clés SSH à l’emplacement par défaut. Lors de la connexion à un serveur de console, les clés SSH doivent être protégées par un mot de passe.
Les sections suivantes décrivent les étapes de génération des clés SSH, de configuration des clés sur les appareils distants et d’utilisation des clés pour se connecter à l’équipement géré :
Générer et configurer des clés SSH
Pour générer des clés SSH sur le serveur de gestion de la configuration et configurer la clé publique sur des appareils distants :
Clés SSH de référence dans les applications Junos PyEZ
Une fois que vous avez généré la paire de clés SSH et configuré la clé publique sur l’équipement distant, les applications Junos PyEZ peuvent utiliser la clé pour se connecter à l’équipement. Pour utiliser la clé, incluez les arguments appropriés dans le Device constructeur. Les Device arguments sont déterminés par :
-
L’emplacement de la clé
-
Si la clé est activement chargée dans un agent de clé SSH, tel que ssh-agent
-
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 sections suivantes présentent les différents scénarios :
- Utilisation d’un agent de clé SSH avec des clés chargées activement
- Utiliser des clés SSH sans protection par mot de passe
- Utilisez des clés SSH protégées par mot de passe
Utilisation d’un agent de clé SSH avec des clés chargées activement
Vous pouvez utiliser un agent de clé SSH ou un agent d’authentification pour stocker les clés privées en toute sécurité et éviter de retaper à plusieurs reprises la phrase secrète des clés protégées par mot de passe. Un client Junos PyEZ peut se connecter à un appareil à l’aide de clés SSH qui sont activement chargées dans l’agent SSH. Par défaut, si les Device arguments ne spécifient pas de mot de passe ou ne font pas référence à un fichier de clé SSH, Junos PyEZ vérifie d’abord les clés SSH qui sont activement chargées dans l’agent de clé SSH, puis recherche les clés SSH à l’emplacement par défaut. Notez que Device peut définir le fichier de clé SSH explicitement dans la liste d’arguments ou via les paramètres du fichier de configuration SSH.
Pour vous connecter à un appareil à l’aide de clés SSH activement chargées dans l’agent de clé SSH natif :
-
Pour vous connecter directement à un équipement Junos, il vous suffit de renseigner le nom d’hôte ou l’adresse IP requis dans la liste d’arguments
Device.dev = Device(host='router.example.com')
-
Pour vous connecter à un équipement Junos par le biais d’un bastion ou d’un hôte de saut, définissez
hostle nom d’hôte ou l’adresse IP du périphérique Junos et incluez l’argumentproxy_commanddéfinissant la connexion via l’hôte de saut.dev = Device(host='router.example.com', proxy_command="ssh -W %h:%p -q jumphost.example.com")
Le Device constructeur prend également en charge l’argument allow_agent pour fournir un contrôle plus précis sur le moment d’utiliser l’agent de clé SSH. Le Tableau 1 présente les paramètres.
| allow_agent valeurs | Comportement |
|---|---|
|
|
La connexion SSH utilise des clés dans l’agent SSH uniquement si les |
|
|
La connexion SSH utilise des clés chargées dans l’agent SSH. |
|
|
La connexion SSH n’utilise pas les clés de l’agent SSH. |
Par exemple, supposons que vous chargez des clés SSH pour un hôte dans l’agent de clé SSH. De plus, votre fichier de configuration SSH contient une entrée d’hôte qui définit l’option IdentityFile avec le fichier de clé privée pour cet hôte. Dans votre application Junos PyEZ, vous créez une instance de Device et définissez uniquement l’argument host . Par défaut, Device utilise le fichier de clé privée défini par IdentityFile. Étant donné que les Device arguments font référence à un fichier de clé privée, Junos PyEZ ne vérifie pas l’agent de clé SSH. Si le fichier de clé privée contient une phrase secrète, la connexion échoue car aucun mot de passe n’est fourni. Ainsi, pour utiliser l’agent SSH tout en conservant l’option IdentityFile dans le fichier de configuration SSH, vous pouvez définir allow_agent=True.
dev = Device(host='router.example.com', allow_agent=True)
Utiliser des clés SSH sans protection par mot de passe
Junos PyEZ permet à un client de se connecter directement à un équipement Junos à l’aide de clés privées SSH qui ne sont pas protégées par mot de passe. Cependant, nous vous déconseillons d’utiliser des clés privées SSH avec une phrase de passe vide. Junos PyEZ ne prend pas en charge la connexion à un serveur de console à l’aide de clés privées SSH avec une phrase de passe vide.
Pour vous connecter à un équipement Junos à l’aide de clés SSH qui se trouvent à l’emplacement par défaut et qui ne sont pas protégées par mot de passe :
-
Dans la liste des
Devicearguments, vous devez uniquement fournir le nom d’hôte ou l’adresse IP requis.dev = Device(host='router.example.com')
Junos PyEZ vérifie d’abord les clés SSH chargées dans l’agent de clé SSH actif, puis vérifie les clés SSH à l’emplacement 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ées par mot de passe :
-
Dans la liste d’arguments
Device, définissez l’argumentssh_private_key_filesur le chemin de la clé privée SSH.dev = Device(host='router.example.com', ssh_private_key_file='/home/user/.ssh/id_rsa_dc')
Remarque :Si le fichier de configuration SSH de l’utilisateur spécifie déjà le chemin d’accès au fichier de clé privée SSH local pour un hôte donné, vous pouvez omettre l’argument
ssh_private_key_filedans la liste desDevicearguments. L’inclusion de l’argumentssh_private_key_fileremplace toute valeur existanteIdentityFiledéfinie pour un hôte dans le fichier de configuration SSH de l’utilisateur.
Utilisez des clés SSH protégées par mot de passe
Les clients Junos PyEZ peuvent utiliser des clés SSH protégées par mot de passe pour se connecter directement à un équipement Junos, à un équipement Junos par le biais d’un bastion ou d’un hôte de saut, ou à un serveur de console connecté à l’équipement. Les sections suivantes expliquent comment définir explicitement les Device arguments en faveur des clés SSH protégées par mot de passe. Pour utiliser à la place des clés protégées par mot de passe chargées dans un agent de clé SSH actif, consultez Utiliser un agent de clé SSH avec des clés chargées activement.
- Connectez-vous directement à un équipement Junos
- Se connecter via un hôte de Jump
- Connectez-vous via un serveur de console
Connectez-vous directement à un équipement Junos
Pour vous connecter directement à un équipement Junos à l’aide d’une clé SSH protégée par mot de passe :
-
Incluez du code qui demande le mot de passe de la clé privée SSH et stocke la valeur dans une variable.
from jnpr.junos import Device from getpass import getpass key_password = getpass('Password for SSH private key file: ')
-
Dans la liste des
Devicearguments :-
Définissez l’argument
passwdpour référencer la variable contenant la phrase secrète du fichier de clé SSH. -
Définissez l’argument
ssh_private_key_filesur le chemin de la clé privée, si la clé n’est pas à l’emplacement par défaut et que le fichier de configuration SSH ne définit pas déjà le chemin du fichier de clé privée.
from jnpr.junos import Device from getpass import getpass key_password = getpass('Password for SSH private key file: ') dev = Device(host='router.example.com', passwd=key_password, ssh_private_key_file='/home/user/.ssh/id_rsa_dc') dev.open() # ... dev.close()
-
Se connecter via un hôte de Jump
Pour vous connecter à un équipement Junos par le biais d’un bastion ou d’un jump host à l’aide de clés SSH protégées par mot de passe pour les deux équipements :
-
Incluez le code qui demande le mot de passe de la clé privée SSH pour le périphérique réseau et stocke la valeur dans une variable.
from jnpr.junos import Device from getpass import getpass host = "router1.example.com" junos_passwd = getpass("SSH key passphrase for network device: ")
-
Dans la liste des
Devicearguments :-
Définissez l’argument
hostsur le nom d’hôte ou l’adresse IP de l’appareil Junos. -
Définissez l’argument
passwdpour référencer la variable contenant la phrase de passe du fichier de clé SSH pour le périphérique Junos. -
Définissez l’argument
ssh_private_key_filesur le chemin de la clé privée de l’équipement Junos, si la clé ne se trouve pas à l’emplacement par défaut et si le fichier de configuration SSH ne définit pas déjà le chemin d’accès au fichier de clé privée. -
Incluez l’argument
proxy_commandet définissez la connexion pour l’hôte de saut, y compris le fichier d’utilisateur et d’identité, si nécessaire.
from jnpr.junos import Device from getpass import getpass host = "router1.example.com" junos_passwd = getpass("SSH key passphrase for network device: ") dev = Device( host=host, passwd=junos_passwd, ssh_private_key_file="/home/user/.ssh/id_rsa_junos", proxy_command="ssh -i /home/user/.ssh/id_rsa_jump -W %h:%p -q user@jumphost.example.com" ) dev.open() print(dev.facts) dev.close()
-
Lorsque vous exécutez le script, il vous invite à saisir les phrases de passe des clés privées.
Connectez-vous via un serveur de console
Pour vous connecter à un équipement Junos via un serveur de console qui utilise un fichier de clé SSH protégé par mot de passe :
-
Incluez du code qui demande les identifiants de connexion pour l’équipement Junos et stocke chaque valeur dans une variable.
from jnpr.junos import Device from getpass import getpass junos_username = input('Junos OS username: ') junos_password = getpass('Junos OS password: ')
-
Inclut le code qui demande le nom d’utilisateur et le mot de passe de la clé privée du serveur de console et stocke chaque valeur dans une variable.
from jnpr.junos import Device from getpass import getpass junos_username = input('Junos OS username: ') junos_password = getpass('Junos OS password: ') cs_username = input('Console server username: ') cs_password = getpass('Console server key passphrase: ')
-
Dans la liste des
Devicearguments :-
Définissez l’argument
hostsur le nom d’hôte ou l’adresse IP du serveur de console. -
Définissez les
userarguments etpasswdsur les variables contenant les identifiants de connexion de Junos OS. -
Définissez l’argument
cs_usersur la variable contenant le nom d’utilisateur du serveur de console. -
Définissez l’argument
cs_passwdsur la variable contenant la phrase secrète du fichier de clé SSH. -
Définissez l’argument
ssh_private_key_filesur le chemin de la clé privée, si la clé n’est pas à l’emplacement par défaut et que le fichier de configuration SSH ne définit pas déjà le chemin du fichier de clé privée. - Définissez l’argument
portsur le port TCP qui correspond au périphérique TTY sur le serveur de console.
from jnpr.junos import Device from getpass import getpass junos_username = input('Junos OS username: ') junos_password = getpass('Junos OS password: ') cs_username = input('Console server username: ') cs_password = getpass('Console server key passphrase: ') with Device(host='cs.example.com', user=junos_username, passwd=junos_password, cs_user=cs_username, cs_passwd=cs_password, ssh_private_key_file='/home/user/.ssh/id_rsa_dc', port=3007) as dev: print (dev.facts) # ...
-