Autenticar a los usuarios de Junos PyEZ
Las aplicaciones de Junos PyEZ pueden autenticar a los usuarios mediante una contraseña u otros mecanismos de autenticación SSH estándar.
Descripción general de la autenticación de usuario de Junos PyEZ
Junos PyEZ le permite conectarse directamente y administrar dispositivos Junos mediante una conexión de consola serie, Telnet o una sesión de NETCONF a través de SSH. Junos PyEZ también admite la conexión a un dispositivo a través de una conexión Telnet o SSH a un servidor de consola que está conectado al puerto del CONSOLE dispositivo. Además, Junos PyEZ puede conectarse a un dispositivo a través de un dispositivo intermedio, como un bastión o un host de salto.
Los dispositivos remotos deben ser capaces de autenticar al usuario mediante una contraseña u otros mecanismos de autenticación SSH estándar, según el método de conexión. Cuando administra dispositivos Junos a través de una conexión SSH, la forma más conveniente y segura de acceder a un dispositivo es configurar claves SSH. Las claves SSH permiten que el dispositivo remoto identifique a los usuarios de confianza.
Puede realizar operaciones de dispositivo con cualquier cuenta de usuario que tenga acceso al dispositivo de Junos administrado. Puede definir explícitamente el usuario al crear una nueva instancia de la jnpr.junos.device.Device clase. Si no especifica un usuario, el valor predeterminado del usuario es el valor de la $USER variable de entorno.
Para conexiones SSH, Junos PyEZ consulta automáticamente el archivo de configuración SSH predeterminado en ~/.ssh/config, si existe. También puede incluir ssh_config en la lista de Device argumentos para especificar un archivo de configuración diferente. Junos PyEZ utiliza cualquier configuración relevante en el archivo de configuración SSH que no se anula por los argumentos en la lista de Device argumentos, como el usuario o el archivo de identidad.
Cuando usa SSH para conectarse a un dispositivo, Junos PyEZ primero prueba la autenticación basada en clave pública SSH y, luego, prueba la autenticación basada en contraseña. Cuando se utiliza la autenticación basada en contraseña, la contraseña proporcionada se utiliza como contraseña del dispositivo. Cuando se utilizan claves SSH, la contraseña proporcionada es la frase de contraseña para desbloquear la clave privada. No es necesario proporcionar una contraseña si carga la clave en un agente de claves SSH o si la clave privada SSH tiene una frase de contraseña vacía. Sin embargo, no recomendamos usar claves privadas SSH con frases de contraseña vacías.
Obtenga credenciales de una manera segura y adecuada para su entorno. Como práctica recomendada, solicite credenciales cada vez que ejecute el script en lugar de almacenarlas en un formato sin cifrar.
En las siguientes secciones se describen los distintos métodos de autenticación.
Autenticar a los usuarios de Junos PyEZ mediante una contraseña
Para autenticar a un usuario de Junos PyEZ con una contraseña:
Autenticar a usuarios de Junos PyEZ mediante claves SSH
Para usar claves SSH en una aplicación Junos PyEZ, primero debe generar las claves en el servidor de administración de configuración. Luego, configure la clave pública en cada dispositivo al que se conectará el cliente de Junos PyEZ. Los dispositivos pueden incluir un dispositivo de Junos, un servidor de consola o un bastión o un host de salto. Para utilizar las claves, debe incluir los argumentos adecuados en la lista de Device argumentos.
Junos PyEZ puede utilizar claves SSH que se cargan activamente en un agente de claves SSH, claves que se generan en la ubicación predeterminada o en una ubicación definida por el usuario, y claves que usan o renuncian a la protección con contraseña. Si los Device argumentos no especifican una contraseña ni hacen referencia a un archivo de clave SSH, Junos PyEZ comprueba primero las claves SSH que se cargan activamente en el agente de claves SSH y, luego, comprueba si hay claves SSH en la ubicación predeterminada. Cuando se conecte a un servidor de consola, las claves SSH deben estar protegidas con contraseña.
En las siguientes secciones, se describen los pasos para generar las claves SSH, configurar las claves en dispositivos remotos y usar las claves para conectarse al dispositivo administrado:
Genere y configure claves SSH
Para generar claves SSH en el servidor de administración de configuración y configurar la clave pública en dispositivos remotos:
Claves SSH de referencia en aplicaciones PyEZ de Junos
Después de generar el par de claves SSH y configurar la clave pública en el dispositivo remoto, las aplicaciones de Junos PyEZ pueden usar la clave para conectarse al dispositivo. Para usar la clave, incluya los argumentos adecuados en el Device constructor. Los Device argumentos vienen determinados por:
-
La ubicación de la llave
-
Si la clave está cargada activamente en un agente de claves SSH, como ssh-agent
-
Si la clave está protegida por contraseña
-
Si el archivo de configuración SSH del usuario ya define la configuración para ese host
En las siguientes secciones se describen los distintos escenarios:
- Uso de un agente de claves SSH con claves cargadas activamente
- Usar claves SSH sin protección de contraseña
- Utilice claves SSH protegidas por contraseña
Uso de un agente de claves SSH con claves cargadas activamente
Puede usar un agente de claves SSH, o un agente de autenticación, para almacenar de forma segura las claves privadas y evitar volver a escribir repetidamente la frase de contraseña para las claves protegidas con contraseña. Un cliente de Junos PyEZ puede conectarse a un dispositivo mediante claves SSH que se cargan activamente en el agente SSH. De forma predeterminada, si los Device argumentos no especifican una contraseña o hacen referencia a un archivo de clave SSH, Junos PyEZ comprueba primero las claves SSH que están cargadas activamente en el agente de claves SSH y, luego, comprueba si hay claves SSH en la ubicación predeterminada. Tenga en cuenta que Device puede establecer el archivo de clave SSH explícitamente en la lista de argumentos o a través de la configuración en el archivo de configuración SSH.
Para conectarse a un dispositivo mediante claves SSH que se cargan activamente en el agente de claves SSH nativo:
-
Para conectarse directamente a un dispositivo Junos, solo debe proporcionar el nombre de host o la dirección IP necesarios en la lista de
Deviceargumentos.dev = Device(host='router.example.com')
-
Para conectarse a un dispositivo Junos mediante un bastión o un host de salto, establezca
hostel nombre de host o la dirección IP del dispositivo Junos e incluya elproxy_commandargumento que define la conexión mediante el host de salto.dev = Device(host='router.example.com', proxy_command="ssh -W %h:%p -q jumphost.example.com")
El Device constructor también admite el argumento para proporcionar un allow_agent control más preciso sobre cuándo usar el agente de claves SSH. En la Tabla 1 se describen los ajustes.
| Valores allow_agent | Comportamiento |
|---|---|
|
|
La conexión SSH utiliza claves en el agente SSH solo si los |
|
|
La conexión SSH utiliza claves cargadas en el agente SSH. |
|
|
La conexión SSH no utiliza claves del agente SSH. |
Por ejemplo, suponga que carga claves SSH para un host en el agente de claves SSH. Además, el archivo de configuración SSH contiene una entrada de host que define la opción con el IdentityFile archivo de clave privada para ese host. En su aplicación Junos PyEZ, puede crear una instancia de Device y definir solo el host argumento. De forma predeterminada, Device utiliza el archivo de clave privada definido por IdentityFile. Dado que los argumentos hacen referencia a un archivo de Device clave privada, Junos PyEZ no comprueba el agente de clave SSH. Si el archivo de clave privada tiene una frase de contraseña, se produce un error en la conexión porque no se proporciona ninguna contraseña. Por lo tanto, para utilizar el agente SSH pero conservar la IdentityFile opción en el archivo de configuración SSH, puede establecer allow_agent=True.
dev = Device(host='router.example.com', allow_agent=True)
Usar claves SSH sin protección de contraseña
Junos PyEZ permite que un cliente se conecte directamente a un dispositivo Junos mediante claves privadas SSH que no tienen protección con contraseña. Sin embargo, no recomendamos usar claves privadas SSH con una frase de contraseña vacía. Junos PyEZ no admite la conexión a un servidor de consola mediante claves privadas SSH con una frase de contraseña vacía.
Para conectarse a un dispositivo Junos con claves SSH que se encuentran en la ubicación predeterminada y no tienen protección con contraseña:
-
En la lista de
Deviceargumentos, solo debe proporcionar el nombre de host o la dirección IP necesarios.dev = Device(host='router.example.com')
Junos PyEZ comprueba primero las claves SSH que se cargan en el agente de claves SSH activo y, luego, comprueba las claves SSH en la ubicación predeterminada.
Para conectarse a un dispositivo Junos con claves SSH que no están en la ubicación predeterminada y no tienen protección con contraseña:
-
En la
Devicelista de argumentos, establezca elssh_private_key_fileargumento en la ruta de acceso de la clave privada SSH.dev = Device(host='router.example.com', ssh_private_key_file='/home/user/.ssh/id_rsa_dc')
Nota:Si el archivo de configuración SSH del usuario ya especifica la ruta del archivo de clave privada SSH local para un host determinado, puede omitir el
ssh_private_key_fileargumento en la lista deDeviceargumentos. Incluir elssh_private_key_fileargumento anula cualquier valor existenteIdentityFiledefinido para un host en el archivo de configuración SSH del usuario.
Utilice claves SSH protegidas por contraseña
Los clientes de Junos PyEZ pueden usar claves SSH protegidas con contraseña para conectarse directamente a un dispositivo Junos, a un dispositivo Junos a través de un bastión o un host de salto, o a un servidor de consola conectado al dispositivo. En las siguientes secciones se describe cómo definir explícitamente los argumentos para las Device claves SSH protegidas con contraseña. Para usar en su lugar claves protegidas por contraseña cargadas en un agente de claves SSH activo, consulte Uso de un agente de claves SSH con claves cargadas activamente.
- Conectarse directamente a un dispositivo de Junos
- Conéctese a través de un host de Jump
- Conexión a través de un servidor de consola
Conectarse directamente a un dispositivo de Junos
Para conectarse directamente a un dispositivo Junos con una clave SSH protegida con contraseña:
-
Incluye código que solicita la contraseña de clave privada SSH y almacena el valor en una variable.
from jnpr.junos import Device from getpass import getpass key_password = getpass('Password for SSH private key file: ')
-
En la lista de
Deviceargumentos:-
Establezca el
passwdargumento para hacer referencia a la variable que contiene la frase de contraseña del archivo de clave SSH. -
Establezca el
ssh_private_key_fileargumento en la ruta de acceso de la clave privada si la clave no está en la ubicación predeterminada y el archivo de configuración SSH aún no define la ruta del archivo de clave privada.
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()
-
Conéctese a través de un host de Jump
Para conectarse a un dispositivo Junos a través de un bastión o un host de salto con claves SSH protegidas por contraseña para ambos dispositivos:
-
Incluye un código que solicite la contraseña de clave privada SSH para el dispositivo de red y almacene el valor en una variable.
from jnpr.junos import Device from getpass import getpass host = "router1.example.com" junos_passwd = getpass("SSH key passphrase for network device: ")
-
En la lista de
Deviceargumentos:-
Establezca el
hostargumento en el nombre de host o la dirección IP del dispositivo de Junos. -
Establezca el
passwdargumento para hacer referencia a la variable que contiene la frase de contraseña del archivo de clave SSH para el dispositivo Junos. -
Establezca el
ssh_private_key_fileargumento en la ruta de la clave privada para el dispositivo Junos si la clave no está en la ubicación predeterminada y el archivo de configuración SSH aún no define la ruta del archivo de clave privada. -
Incluya el
proxy_commandargumento y defina la conexión para el host de salto, incluido el usuario y el archivo de identidad, si es necesario.
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()
-
Cuando ejecute el script, el script solicitará las frases de contraseña de las claves privadas.
Conexión a través de un servidor de consola
Para conectarse a un dispositivo Junos a través de un servidor de consola que utilice un archivo de clave SSH protegido con contraseña:
-
Incluye un código que solicite las credenciales de inicio de sesión para el dispositivo Junos y almacene cada valor en una variable.
from jnpr.junos import Device from getpass import getpass junos_username = input('Junos OS username: ') junos_password = getpass('Junos OS password: ')
-
Incluye código que solicite el nombre de usuario del servidor de la consola y la contraseña de la clave privada y almacene cada valor en una 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: ')
-
En la lista de
Deviceargumentos:-
Establezca el
hostargumento en el nombre de host o la dirección IP del servidor de consola. -
Establezca los
userargumentos ypasswden las variables que contienen las credenciales de inicio de sesión de Junos OS. -
Establezca el
cs_userargumento en la variable que contiene el nombre de usuario del servidor de consola. -
Establezca el
cs_passwdargumento en la variable que contiene la frase de contraseña del archivo de clave SSH. -
Establezca el
ssh_private_key_fileargumento en la ruta de acceso de la clave privada si la clave no está en la ubicación predeterminada y el archivo de configuración SSH aún no define la ruta del archivo de clave privada. - Establezca el
portargumento en el puerto TCP que se asigna al dispositivo TTY en el servidor de la consola.
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) # ...
-