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

Descripción general de la autenticación

Juniper Networks proporciona módulos de Ansible que puede usar para administrar dispositivos Junos. Los módulos de Juniper Networks se distribuyen a través de la juniper.device colección y el Juniper.junos rol, que se alojan en Ansible Galaxy.

Los módulos de Juniper Networks le permiten conectarse directamente a dispositivos Junos y administrarlos 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 conectado al puerto del CONSOLE dispositivo. El dispositivo remoto debe poder autenticar al usuario mediante una contraseña u otros mecanismos de autenticación SSH estándar, según el protocolo de conexión.

Cuando utiliza Ansible para administrar dispositivos Junos, la forma más cómoda de acceder al dispositivo es configurar 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 manuales.

Para las conexiones SSH, los módulos de Juniper Networks primero intentan la autenticación basada en clave pública SSH y, a continuación, prueban la autenticación basada en contraseña. Cuando las claves SSH están en uso, la contraseña suministrada se utiliza como frase de contraseña para desbloquear la clave SSH privada. Cuando se utiliza la autenticación basada en contraseña, la contraseña proporcionada se utiliza como contraseña del dispositivo. Si se usa la autenticación basada en clave pública SSH y la clave privada SSH tiene una frase de contraseña vacía, no se requiere una contraseña. Sin embargo, no se recomiendan las claves privadas SSH con frases de contraseña vacías. Para recuperar una contraseña para autenticación basada en contraseña o claves SSH protegidas con contraseña, puede solicitar la contraseña desde el manual o la línea de comandos, o puede crear un archivo de datos cifrado en el almacén que almacene la contraseña de forma segura.

Puede especificar los parámetros de conexión y autenticación para los módulos de Juniper Networks de las siguientes maneras. Si no define explícitamente los valores, en algunos casos se utilizan valores predeterminados, como se describe en Descripción de los valores predeterminados para 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 las variables, tal y como se describe en Descripción de la prioridad de las variables en los documentos oficiales de Ansible.

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

  • Archivo de configuración del cliente SSH: para las conexiones SSH, los módulos de Juniper Networks consultan automáticamente el archivo de configuración SSH predeterminado en ~/.ssh/config, si existe, a menos que defina la opción para especificar un archivo de ssh_config 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 juniper.device módulos y Juniper.junos admiten especificar opciones relacionadas con la conexión y autenticación para conexiones locales (connection: local) como argumentos de módulo de nivel superior. Además, Juniper.junos los módulos admiten el uso de un diccionario de proveedor en los argumentos de módulo, tal como se describe en Cómo definir el parámetro de proveedor en módulos de Juniper.junos.

  • vars:section: los juniper.device módulos admiten especificar opciones relacionadas con la conexión y la autenticación para conexiones locales y persistentes en la sección de una obra, que se describe en Cómo definir parámetros de autenticación en vars: Sección para conexiones locales y persistentesvars:.

En este documento se describen los distintos aspectos de la autenticación cuando se utilizan los módulos de Juniper Networks para administrar dispositivos Junos.

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 prioridad de las variables para los parámetros de conexión comunes para los módulos de la colección y Juniper.junos el juniper.device rol. Para obtener información sobre los argumentos aceptados para los módulos individuales, consulte la documentación de referencia de API para ese módulo.

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

Nombre del parámetro

Alias de parámetros

Descripción

Valor predeterminado y prioridad de variables

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 clave SSH utilizada 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 de acceso a un archivo de configuración de cliente SSH.

Si omite este parámetro, los módulos utilizan 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 utilizado para autenticarse con el dispositivo remoto.

Si no especifica explícitamente la ruta 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 en 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 según la definición de Ansible

  3. USER variable de entorno

Al ejecutar 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, ya que el valor predeterminado es {{ inventory_hostname }}.

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

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

  • ANSIBLE_REMOTE_USER variable de entorno

  • remote_user Valores de configuración

Cómo definir parámetros de autenticación en los vars: sección para conexiones locales y persistentes

Puede definir parámetros de conexión y autenticación para los módulos en la juniper.device sección de la obra, además de definirlos como lo haría normalmente a través de vars: otras variables, 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 única ubicación que todos los módulos de la reproducción pueden usar para conectarse a un host. Además, algunas conexiones de Ansible requieren el uso de la vars: sección cuando se definen 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 connection: local

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

Para las conexiones locales y 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 de la reproducción que requiera una conexión. Por el contrario, cuando se utiliza connection: juniper.device.pyez, Ansible establece una conexión única y persistente con un host, que persiste en la ejecución de todas las tareas de la reproducción.

Utilice los mismos parámetros de conexión y autenticación para las conexiones persistentes que para las conexiones locales, y los valores de parámetro predeterminados descritos en Descripción de los valores predeterminados para los módulos de Juniper Networks se aplican a ambos tipos de conexiones. Sin embargo, al definir parámetros de conexión y autenticación dentro de una reproducción para conexiones persistentes, debe definir los parámetros en la vars: sección en lugar de definir los parámetros como argumentos de módulo de nivel superior en cada tarea porque solo hay una conexión única y, por lo tanto, los parámetros deben aplicarse a todas las tareas de esa reproducción. Para las conexiones locales, puede definir los parámetros en la vars: sección o como argumentos de módulo. Si define los parámetros en ambos lugares, los argumentos del módulo tienen prioridad.

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

Cómo definir el parámetro provider en módulos de Juniper.junos

A partir Juniper.junos de la versión 2.0.0, los Juniper.junos módulos admiten el provider parámetro además de admitir argumentos de módulo de nivel superior individuales para cada uno de los parámetros relacionados con la conexión y la autenticación. El provider parámetro permite definir los parámetros de conexión y autenticación para varios módulos en un solo lugar y pasar fácilmente esos valores a los módulos que los utilizan. Además, si necesita actualizar los parámetros más adelante, solo necesita realizar la actualización en una sola ubicación.

Nota:

Los juniper.device módulos de recopilación no admiten el uso del provider parámetro.

El provider argumento acepta un diccionario que contiene los detalles de conexión necesarios para conectarse y autenticarse con un dispositivo. El host argumento siempre es necesario para una conexión, pero no es necesario especificar explícitamente un valor si el módulo utiliza el valor predeterminado para host. El diccionario puede definir opcionalmente parámetros adicionales necesarios para la conexión, incluidos user, passwd, y ssh_private_key_file, entre otros. Para obtener información sobre los argumentos aceptados para los módulos individuales, consulte la documentación de referencia de API para ese módulo.

En el ejemplo siguiente, la credentials variable es un diccionario que define los hostparámetros , user, y passwd :

El siguiente manual de ejemplo utiliza el argumento single provider para pasar los detalles de conexión al juniper_junos_facts módulo en lugar de definir argumentos de módulo individuales. A medida que agrega tareas adicionales que utilizan los Juniper.junos módulos, puede hacer referencia al mismo diccionario para cada módulo.

Cómo autenticar al usuario mediante claves SSH

Las redes juniper.device y los módulos de Juniper.junos Juniper le permiten usar claves SSH para conectarse a un dispositivo Junos o a un servidor de consola conectado al dispositivo. Para autenticar a un usuario mediante claves SSH, genere primero las claves en el nodo de control de Ansible y, a continuación, 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.

Generar y configurar 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 para el usuario deseado y proporcione las opciones necesarias, por ejemplo:
  2. (Opcional) Cargue la clave en el agente de clave SSH nativo. Por ejemplo:
  3. Configure la clave pública en cada dispositivo al que se conectarán los módulos, 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 en la cuenta de usuario adecuada.

  4. Compruebe que la clave funciona iniciando sesión en el dispositivo con la clave.

Usar claves SSH en manuales de estrategia 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 SSH predeterminado en ~/.ssh/config, si existe, a menos que defina 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 configuraciones específicas 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, en la vars: sección para reproducciones que utilizan los juniper.device módulos con una conexión persistente. Los argumentos que se deben incluir vienen determinados por la ubicación de la clave, si la clave se carga activamente en un agente de clave SSH, si la clave está protegida por contraseña y si el archivo de configuración SSH del usuario ya define la configuración para ese host.

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

  • Para conectarse a un dispositivo Junos mediante claves SSH que no están 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:

    Como alternativa, 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 --private-key opción de línea de comandos OR --key-file al ejecutar el manual.

  • Para conectarse a un dispositivo Junos mediante un archivo de clave SSH protegido por contraseña, que es el método recomendado, puede hacer referencia a la frase de contraseña del archivo de claves SSH en el passwd argumento o proporcionar la contraseña mediante variables normales de Ansible u opciones de línea de comandos.

    Es responsabilidad del usuario obtener la frase de contraseña del archivo de clave SSH de una manera segura y apropiada para su entorno. Se recomienda solicitarlo durante cada invocación del manual o almacenar las variables mediante un almacén cifrado en lugar de almacenar las credenciales en un formato no cifrado. Por ejemplo, puede ejecutar el manual con la --ask-pass opción de línea de comandos y proporcionar la frase de contraseña del archivo de clave SSH cuando se le solicite, como se muestra a continuación:

    Para obtener más información acerca del uso de un archivo de almacén cifrado o de mensaje para la frase de contraseña de clave SSH, consulte Cómo autenticar al usuario mediante un manual de estrategias o un símbolo de contraseña de línea de comandos y Cómo autenticar al usuario mediante un archivo cifrado en el almacén de Ansible.

Para obtener instrucciones sobre cómo utilizar claves SSH para conectarse a un servidor de consola, consulte Cómo autenticarse mediante un servidor de consola.

Cómo autenticar al usuario mediante un manual de estrategias o un símbolo del sistema de contraseña de la línea de comandos

Para autenticar a un usuario que ejecuta módulos de Ansible, puede solicitar las credenciales del usuario cuando ejecute el manual. Por ejemplo, puede definir un mensaje interactivo en el manual de estrategias o puede ejecutar el manual con la -k opción de línea de comandos o --ask-pass para solicitar la contraseña. Cuando las claves SSH están en uso, la contraseña suministrada se utiliza como frase de contraseña para desbloquear la 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 de estrategias para obtener la contraseña del usuario o la frase de contraseña de clave SSH:

  1. Incluya código debajo vars_prompt: del cual se solicite la contraseña del usuario o la frase de contraseña de 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. Ejecute el manual, que solicita el nombre de usuario y la contraseña y no hace eco de la contraseña en la línea de comandos porque la variable está establecida en private: yes.

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

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

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

Puede crear un almacén de Ansible que almacene de forma segura las contraseñas guardadas y otros valores confidenciales de conexión y autenticación en un archivo de datos cifrado por el almacén. A continuación, el manual de estrategias 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 vars: reproducción o como argumentos de módulo.

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

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

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

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

Cómo autenticarse mediante un servidor de consola

Los módulos Ansible de Juniper Networks pueden conectarse 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 la consola como para el dispositivo Junos. Puede proporcionar una contraseña de dispositivo o un archivo de clave SSH protegido por 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 el cuaderno de estrategias si no hay ningún valor predeterminado o si el valor predeterminado no es el adecuado:

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

  • user y passwd—Credenciales de inicio de sesión de Junos OS

  • cs_user—Nombre de usuario del servidor de consola

  • cs_passwd: contraseña del dispositivo o frase de contraseña del archivo de clave SSH necesaria para autenticarse con el servidor de consola

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. En este caso, el cs_passwd argumento es la frase de contraseña de la clave SSH especificada en el ssh_private_key_file argumento.