Help us improve your experience.

Let us know what you think.

Do you have time for a two-minute survey?

 
 

Autenticar a los usuarios que ejecutan módulos de Ansible en dispositivos Junos

Comprenda cómo autenticar a los usuarios cuando se utiliza el conjunto de juniper.device módulos de la colección de juniper.device Ansible.

Juniper Networks proporciona módulos de Ansible que puede usar para administrar dispositivos que ejecutan Junos OS y dispositivos que ejecutan Junos OS evolucionado. Los módulos de Juniper Networks se distribuyen a través de la juniper.device colección. La juniper.device colección incluye dos conjuntos de módulos:

En este tema se explica cómo autenticar a los usuarios cuando se utiliza solo el conjunto de juniper.device módulos. Para obtener información sobre el uso de los junipernetworks.junos módulos para conectarse y autenticarse con dispositivos Junos, consulte Uso de los módulos de Ansible juniper.device.junos_* para administrar dispositivos Junos.

Descripción general de la autenticación

Los juniper.device módulos le permiten conectarse directamente y administrar dispositivos Junos mediante SSH, Telnet o una conexión de consola serie. Los módulos también admiten la conexión al dispositivo a través de una conexión SSH o telnet a un servidor de consola que está conectado al puerto del CONSOLE dispositivo. El dispositivo remoto debe ser capaz de autenticar al usuario mediante una contraseña u otros mecanismos de autenticación SSH estándar, según el protocolo de conexión.

Cuando utilice Ansible para administrar dispositivos Junos, la forma más cómoda de acceder al dispositivo es configurar las claves SSH. Las claves SSH permiten que el dispositivo remoto identifique a los usuarios de confianza. Como alternativa, puede proporcionar un nombre de usuario y una contraseña al ejecutar módulos y playbooks.

En el caso de las conexiones SSH, los módulos primero prueban la autenticación basada en clave pública SSH y, luego, prueban la juniper.device 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 autenticación 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.

Ansible proporciona muchos métodos para proporcionar una contraseña para la autenticación basada en contraseña o claves SSH protegidas con contraseña. Algunas opciones incluyen el uso de un indicador de playbook, proporcionar opciones de línea de comandos o crear un archivo de datos cifrado en la bóveda que almacene la contraseña de forma segura. Consulte la documentación oficial de Ansible para obtener más información.

Puede especificar parámetros de conexión y autenticación para los juniper.device módulos de las siguientes maneras. Si no define explícitamente los valores, en algunos casos se utilizan valores predeterminados. Los valores predeterminados se describen en Descripción de los valores predeterminados de los módulos de Juniper Networks. Si define el valor de un parámetro en varios lugares, Ansible selecciona el valor en función de la prioridad de la variable, tal y como se describe en Descripción de la prioridad de la variable en los documentos oficiales de Ansible.

  • Variables de Ansible: puede especificar los valores de los parámetros de conexión y autenticación utilizando variables normales de Ansible, por ejemplo, variables definidas en archivos de inventario o almacén, variables de host o grupo, o argumentos de línea de comandos.

  • Archivo de configuración de cliente SSH: para las conexiones SSH, los módulos consultan automáticamente el archivo de configuración SSH predeterminado en ~/.ssh/config, si existe. Puede incluir la ssh_config opción de especificar un archivo de configuración diferente. Los módulos utilizan cualquier configuración relevante en el archivo de configuración SSH para la conexión dada, a menos que defina explícitamente variables que anulen la configuración.

  • Argumentos de módulo: los módulos admiten la especificación de opciones relacionadas con la juniper.device conexión y la autenticación para conexiones locales (connection: local) como argumentos de módulo de nivel superior.

  • Sección del libro vars: de estrategias: los módulos admiten la especificación de opciones relacionadas con la juniper.device conexión y la autenticación para conexiones locales y persistentes en la sección de vars: una reproducción, que se describe en Cómo definir parámetros de autenticación en las variables: Sección para conexiones locales y persistentes.

Descripción de los valores predeterminados de los módulos de Juniper Networks

Puede definir explícitamente los parámetros de conexión y autenticación para los módulos que administran dispositivos Junos. Si no define un parámetro, el módulo utiliza un valor predeterminado en algunos casos. En la tabla 1 se describen los valores predeterminados y la precedencia de las variables para los parámetros de conexión comunes para el conjunto de juniper.device módulos. Para obtener información sobre los argumentos aceptados para los módulos individuales, consulte la documentación de referencia de la API para ese módulo.

Tabla 1: Valores predeterminados y precedencia de variables para parámetros de conexión

Nombre del parámetro

alias de parámetros

Descripción

Valor predeterminado y prioridad de variable

host

hostname

ip

Nombre de host o dirección IP del dispositivo remoto con el que se debe establecer la conexión.

{{ inventory_hostname }}

passwd

password

La contraseña del usuario o la frase de contraseña de la clave SSH son necesarias para autenticarse con el dispositivo administrado.

  1. ANSIBLE_NET_PASSWORD variable de entorno

  2. Valor especificado para -k u --ask-pass opción de línea de comandos

ssh_config

Ruta a un archivo de configuración de cliente SSH.

Si omite este parámetro, los módulos utilizarán el archivo de configuración SSH en la ubicación predeterminada, si existe.

~/.ssh/config

ssh_private_key_file

ssh_keyfile

Ruta al archivo de clave privada SSH que se usa para autenticarse con el dispositivo remoto.

Si no especifica explícitamente la ruta de acceso y no se encuentra ningún valor predeterminado, el módulo utiliza el archivo de clave privada SSH especificado en la configuración SSH del usuario o el valor predeterminado específico del sistema operativo.

  1. ANSIBLE_NET_SSH_KEYFILE variable de entorno

  2. Valor especificado para --private-key u --key-file opción de línea de comandos

  3. ninguno

user

username

Nombre de usuario que se utiliza para autenticarse con el nodo administrado.

  1. ANSIBLE_NET_USERNAME variable de entorno

  2. remote_user tal como lo define Ansible

  3. USER variable de entorno

Al ejecutar los módulos de Juniper Networks, el host argumento siempre es necesario para una conexión. Sin embargo, no es necesario especificar explícitamente el host porque el valor predeterminado es {{ inventory_hostname }}.

Puede ejecutar los módulos con cualquier cuenta de usuario que tenga acceso al dispositivo Junos administrado. Se aplican los privilegios de acceso a la cuenta de usuario de Junos OS, y la clase configurada para el usuario de Junos OS determina los permisos. Si no especifica un usuario, el usuario se establece de acuerdo con el algoritmo descrito user en la Tabla 1. Consulte la documentación de Ansible para conocer la prioridad utilizada para definir remote_user, que se puede establecer de varias maneras, entre las que se incluyen:

  • -u o la --user opción de línea de comandos

  • ANSIBLE_REMOTE_USER variable de entorno

  • remote_user opciones de configuración

Cómo definir los parámetros de autenticación en las variables: Sección para conexiones locales y persistentes

Puede definir parámetros de conexión y autenticación para los juniper.device módulos en la sección de vars: la obra. Esta opción se añade a la definición de los parámetros por otros medios, por ejemplo, en el archivo de configuración SSH, en el archivo de inventario de Ansible, como argumentos de línea de comandos o como argumentos de módulo. La vars: sección le permite definir parámetros de conexión comunes en una sola ubicación que todos los módulos del juego pueden usar para conectarse a un host. Además, algunas conexiones de Ansible requieren el uso de la vars: sección al definir los parámetros dentro de la reproducción, como se describe aquí.

Los juniper.device módulos admiten los siguientes tipos de conexiones de Ansible:

  • Conexiones locales, que se definen mediante el uso de connection: local

  • Conexiones persistentes, que se definen mediante el connection: juniper.device.pyez

Tanto para las conexiones locales como para las persistentes, Ansible ejecuta los módulos localmente en el nodo de control. Cuando se utiliza connection: local, Ansible establece una conexión independiente con el host para cada tarea del juego que requiera una conexión. Por el contrario, cuando se usa connection: juniper.device.pyez, Ansible establece una conexión única y persistente con un host, que persiste durante la ejecución de todas las tareas de la obra.

Utilice los mismos parámetros de conexión y autenticación para las conexiones persistentes que para las conexiones locales, y los valores predeterminados de los parámetros se aplican a ambos tipos de conexiones. En el caso de las conexiones locales, puede definir los parámetros de conexión y autenticación en la sección o como argumentos de vars: módulo. Si define los parámetros en ambos lugares, los argumentos del módulo tienen prioridad. Sin embargo, cuando defina parámetros dentro de una reproducción para conexiones persistentes, debe definir los parámetros en la vars: sección. Con las conexiones persistentes, solo hay una conexión única para todas las tareas y, por lo tanto, debe definir los parámetros globalmente para que se apliquen a todas las tareas de ese juego.

El siguiente manual ejecuta dos juniper.device módulos en cada host del grupo de inventario. La jugada define la conexión de Ansible como juniper.device.pyez, que establece una conexión con cada host que persiste durante la ejecución de todas las tareas de la jugada. La sección de vars: reproducción define los parámetros de autenticación para la conexión persistente. Las user variables de referencia y passwd valores definidos en el archivo de vault-vars.yaml almacén.

Cómo autenticar al usuario mediante claves SSH

Los juniper.device módulos le permiten utilizar claves SSH para conectarse a un dispositivo Junos o a un servidor de consola que esté conectado al dispositivo. Para autenticar a un usuario mediante claves SSH, primero genere las claves en el nodo de control de Ansible y, luego, configure las claves en el dispositivo al que se conectará el módulo, ya sea el dispositivo Junos administrado o el servidor de consola conectado al dispositivo Junos.

Genere y configure las claves SSH

Para generar claves SSH en el nodo de control de Ansible y configurar la clave pública en el dispositivo remoto:

  1. En el nodo de control de Ansible, genere el par de claves SSH público y privado del usuario y proporcione las opciones necesarias, por ejemplo:
  2. (Opcional) Cargue la clave en el agente de claves SSH nativo. Por ejemplo:
  3. Configure la clave pública en cada dispositivo al que se conectarán los módulos, lo que podría incluir dispositivos Junos o un servidor de consola conectado a un dispositivo Junos.

    El método más sencillo para configurar la clave pública en un dispositivo Junos es cargar un archivo que contenga la clave pública con la cuenta de usuario adecuada.

  4. Para verificar que la clave funcione, inicie sesión en el dispositivo con la clave.

Uso de claves SSH en manuales de Ansible

Después de generar el par de claves SSH y configurar la clave pública en el dispositivo remoto, puede usar la clave para conectarse al dispositivo. Los módulos de Juniper Networks consultan automáticamente el archivo de configuración de SSH predeterminado en ~/.ssh/config, si existe. También puede definir la ssh_config opción para especificar un archivo de configuración diferente. Los módulos utilizan cualquier configuración relevante en el archivo de configuración SSH para la conexión dada, a menos que defina explícitamente variables que anulen la configuración. Además, los módulos buscan automáticamente claves en la ubicación predeterminada y claves que se cargan activamente en un agente de claves SSH.

Para definir una configuración específica para las claves SSH, puede incluir los argumentos adecuados en el manual de estrategias de Ansible. Defina los argumentos en la ubicación adecuada para el conjunto de módulos y la conexión de Ansible. Por ejemplo, para las obras que usan los juniper.device módulos con una conexión persistente, debe definir la configuración en la vars: sección. Los siguientes factores determinan qué argumentos se incluyen en el manual de estrategias:

  • La ubicación de la llave

  • Si la clave está cargada activamente en un agente de claves SSH

  • 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

Los siguientes ejemplos describen cómo abordar los diferentes escenarios:

  • Para conectarse a un dispositivo Junos mediante claves SSH cargadas activamente en el agente de claves SSH nativo o que se encuentren en la ubicación predeterminada y no tengan protección con contraseña, no es necesario definir ningún argumento relacionado con la conexión o autenticación, a menos que difieran del valor predeterminado.

  • Para conectarse a un dispositivo Junos con claves SSH que no se encuentran en la ubicación predeterminada y no tienen protección con contraseña, establezca el ssh_private_key_file argumento en la ruta del archivo de clave privada SSH. Por ejemplo:

    Alternativamente, puede especificar la ruta de la clave privada SSH: definiéndola en el archivo de configuración SSH; estableciendo la variable de ANSIBLE_NET_SSH_KEYFILE entorno; o definiendo la opción de línea de --private-key comandos o --key-file cuando ejecute el manual.

  • Para conectarse a un dispositivo Junos mediante un archivo de clave SSH protegido con contraseña, que es el método recomendado, puede hacer referencia a la frase de contraseña del archivo de clave SSH de varias maneras. Por ejemplo, puede usar el passwd argumento, definir variables de Ansible o proporcionar opciones de línea de comandos.

    En el siguiente ejemplo, se ejecuta el manual con la --ask-pass opción de línea de comandos para solicitar al usuario la frase de contraseña:

    Nota: Es responsabilidad del usuario obtener la frase de contraseña del archivo de clave SSH de una manera segura y adecuada para su entorno. Se recomienda solicitar la frase de contraseña al ejecutar el manual o almacenar la variable mediante un almacén cifrado en lugar de almacenar las credenciales en un formato no cifrado.

    Para obtener más información sobre el uso de un archivo de solicitud o de bóveda cifrado para la frase de contraseña de clave SSH, consulte Cómo autenticar al usuario mediante un manual de estrategias o una solicitud de contraseña de línea de comandos y Cómo autenticar al usuario mediante un archivo cifrado de Ansible Vault.

Para obtener instrucciones sobre el uso de claves SSH para conectarse a un servidor de consola, consulte Cómo autenticarse a través de un servidor de consola.

Cómo autenticar al usuario mediante un manual de estrategias o un mensaje de contraseña de línea de comandos

Para autenticar a un usuario que ejecuta módulos de Ansible, puede solicitar las credenciales del usuario al ejecutar el manual. Por ejemplo, puede definir un mensaje interactivo en el manual o puede ejecutar el manual con la -k opción de línea de comandos o --ask-pass para solicitar la contraseña. Cuando se utilizan claves SSH, la contraseña proporcionada se utiliza como frase de contraseña de clave SSH privada. Cuando se utiliza la autenticación basada en contraseña, la contraseña proporcionada se utiliza como contraseña del dispositivo.

Para definir un mensaje interactivo en el manual para obtener la contraseña del usuario o la frase de contraseña de la clave SSH:

  1. Incluya un código debajo vars_prompt: de que solicite la contraseña del usuario o la frase de contraseña de la clave SSH (y, opcionalmente, el nombre de usuario) y almacene el valor en una variable.
  2. Establezca los user parámetros y passwd para que cada uno haga referencia a su variable respectiva.
  3. Incluya las tareas a ejecutar.
  4. Ejecute el manual de estrategias, en el que se solicitan el nombre de usuario y la contraseña. El terminal no repite la contraseña cuando la ingresa porque la variable está establecida en private: yes.

Como alternativa, puede ejecutar un libro de estrategias con la -k opción de línea de comandos o --ask-pass para solicitar la contraseña o la frase de contraseña. Considere el siguiente manual de estrategias, que utiliza el nombre de usuario predeterminado:

Ejecute el manual e incluya la opción de -k línea de comandos o --ask-pass , la cual solicita la contraseña y no la repite en la línea de comandos.

Cómo autenticar al usuario mediante un archivo cifrado de Ansible Vault

Puede utilizar Ansible Vault para almacenar de forma segura contraseñas y otros valores confidenciales de conexión y autenticación en un archivo de datos cifrado en Vault. A continuación, el manual puede hacer referencia a esas variables en la ubicación adecuada para el conjunto de módulos y el tipo de conexión de Ansible, por ejemplo, en la sección de la reproducción o como argumentos de vars: módulo.

En este ejemplo, se utiliza el almacén de Ansible para crear y cifrar un nuevo archivo de almacén. También puede cifrar variables individuales o usar varios archivos cifrados con contraseñas diferentes. Consulte la documentación oficial de Ansible para obtener información detallada sobre el uso del almacén de Ansible para cifrar contenido y archivos.

Para crear y utilizar un archivo de almacén de Ansible que contenga las variables necesarias, incluidas las contraseñas:

  1. Cree un archivo de datos cifrado en bóveda y especifique la contraseña necesaria para cifrar, descifrar, editar y utilizar el archivo de datos.
  2. Defina las variables requeridas en el archivo y guárdelo.
  3. Compruebe que el archivo está cifrado.
  4. En el manual de estrategias, incluya el archivo de variable cifrado vault y haga referencia a las variables necesarias en la ubicación adecuada para los módulos y el tipo de conexión de Ansible.
    Nota:

    Si, en cambio, define las variables reales y passwd en user el almacén, los módulos las recogen automáticamente y no es necesario definirlas explícitamente en el libro de estrategias.

  5. Ejecute el libro de jugadas con la --ask-vault-pass opción, que solicita la contraseña del almacén.

Cómo autenticarse a través de un servidor de consola

Los módulos de Ansible de Juniper Networks se pueden conectar a dispositivos Junos a través de un servidor de consola. Para las conexiones SSH a través de un servidor de consola, debe proporcionar las credenciales de autenticación tanto para el servidor de consola como para el dispositivo de Junos. Puede utilizar una contraseña de dispositivo o un archivo de clave SSH protegido con contraseña para la autenticación del servidor de consola.

Para conectarse a un dispositivo Junos a través de un servidor de consola, debe proporcionar los siguientes parámetros en su manual, si no hay un valor predeterminado o si el valor predeterminado no es adecuado:

  • host: nombre de host o dirección IP del servidor de la consola

  • user y passwd: credenciales de inicio de sesión de Junos OS

  • cs_user—Nombre de usuario del servidor de la consola

  • cs_passwd—Se requiere la contraseña del dispositivo o la frase de contraseña del archivo de clave SSH para autenticarse con el servidor de la consola

  • port—Puerto, si es diferente del predeterminado

En el ejemplo siguiente, las credenciales para el usuario de Junos OS y el usuario del servidor de consola se definen en un archivo de almacén de Ansible. A continuación, se hace referencia a las variables del almacén en el manual de estrategias. En este caso, el cs_passwd argumento es la frase de contraseña para la clave SSH especificada en el ssh_private_key_file argumento.