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, que está alojada 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 recomendamos usar 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. También 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
juniper.device
módulos admiten especificar opciones relacionadas con la conexión y autenticación para conexiones locales (connection: local
) como argumentos de módulo de nivel superior. -
vars:
section: losjuniper.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 juniper.device
colección. 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.
Nombre del parámetro |
Alias de parámetros |
Descripción |
Valor predeterminado y prioridad de variables |
---|---|---|---|
|
|
Nombre de host o dirección IP del dispositivo remoto con el que se debe establecer la conexión. |
|
|
|
La contraseña del usuario o la frase de contraseña de clave SSH utilizada para autenticarse con el dispositivo administrado. |
|
|
– |
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 |
|
|
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. |
|
|
|
Nombre de usuario que se utiliza para autenticarse con el nodo administrado. |
|
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 juniper.device
módulos en la sección de vars:
juego. Esto se suma a definirlos como lo haría normalmente a través de 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. Para las conexiones locales, puede definir los parámetros de conexión y autenticación 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. Sin embargo, cuando defina parámetros dentro de un juego 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 esa reproducción.
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.
--- - name: Get Device Facts hosts: dc1 connection: juniper.device.pyez gather_facts: no vars: user: "{{ admin_username }}" passwd: "{{ 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 }}"
Cómo autenticar al usuario mediante claves SSH
Los módulos de Juniper Networks juniper.device
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:
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. 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 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.
juniper.device.facts: savedir: "{{ playbook_dir }}"
-
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:vars: ssh_private_key_file: "/home/user/.ssh/id_rsa_alternate" tasks: - name: Retrieve facts from Junos devices juniper.device.facts: savedir: "{{ playbook_dir }}"
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:vars: ssh_private_key_file: "/home/user/.ssh/id_rsa_dc" tasks: - name: Retrieve facts from Junos devices juniper.device.facts: savedir: "{{ playbook_dir }}"
user@localhost:~$ ansible-playbook playbook.yaml --ask-pass SSH password:
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:
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:
--- - name: Get Device Facts hosts: all connection: local gather_facts: no tasks: - name: Retrieve facts from Junos devices juniper.device.facts: savedir: "{{ playbook_dir }}" - name: Print facts ansible.builtin.debug: var: junos.version
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.
user@localhost:~$ ansible-playbook playbook.yaml --ask-pass SSH password: PLAY [Get Device Facts] *********************************************** ...
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:
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 utilizar 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
ypasswd
—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.
--- - name: Get Device Facts hosts: dc1_con connection: local gather_facts: no vars_files: - vault-vars.yaml vars: host: "{{ inventory_hostname }}" user: "{{ junos_username }}" passwd: "{{ junos_password }}" cs_user: "{{ cs_username }}" cs_passwd: "{{ cs_key_password }}" ssh_private_key_file: "/home/user/.ssh/id_rsa_dc" tasks: - name: Retrieve facts from Junos devices juniper.device.facts: savedir: "{{ playbook_dir }}"