Autenticar usuários que executam módulos do Ansible em dispositivos Junos

Entenda como autenticar usuários ao usar o juniper.device conjunto de módulos na juniper.device coleção Ansible.

A Juniper Networks oferece módulos Ansible que você pode usar para gerenciar dispositivos que executam o Junos OS e dispositivos que executam o Junos OS Evolved. Os módulos da Juniper Networks são distribuídos por meio da juniper.device coleção. A juniper.device coleção inclui dois conjuntos de módulos:

Este tópico discute como autenticar usuários quando você usa apenas o juniper.device conjunto de módulos. Para obter informações sobre como usar os junipernetworks.junos módulos para se conectar e autenticar com dispositivos Junos, consulte Usar os módulos do Ansible juniper.device.junos_* para gerenciar dispositivos Junos.

Visão geral da autenticação

Os juniper.device módulos permitem que você se conecte diretamente e gerencie dispositivos Junos usando SSH, telnet ou uma conexão de console serial. Os módulos também suportam a conexão ao dispositivo por meio de uma conexão SSH ou telnet a um servidor de CONSOLE console conectado à porta do dispositivo. O dispositivo remoto deve ser capaz de autenticar o usuário usando uma senha ou outros mecanismos de autenticação SSH padrão, dependendo do protocolo de conexão.

Quando você usa o Ansible para gerenciar dispositivos Junos, a maneira mais conveniente de acessar o dispositivo é configurar chaves SSH. As chaves SSH permitem que o dispositivo remoto identifique usuários confiáveis. Como alternativa, você pode fornecer um nome de usuário e senha ao executar módulos e playbooks.

Para conexões SSH, os juniper.device módulos primeiro tentam a autenticação baseada em chave pública SSH e, em seguida, tentam a autenticação baseada em senha. Quando a autenticação baseada em senha é usada, a senha fornecida é usada como a senha do dispositivo. Quando as chaves SSH estão em uso, a senha fornecida é a senha para desbloquear a chave privada. Você não precisará fornecer uma senha se carregar a chave em um agente de autenticação SSH ou se a chave privada SSH tiver uma senha vazia. No entanto, não recomendamos o uso de chaves privadas SSH com senhas vazias.

O Ansible fornece muitos métodos para fornecer uma senha para autenticação baseada em senha ou chaves SSH protegidas por senha. Algumas opções incluem usar um prompt de manual, fornecer opções de linha de comando ou criar um arquivo de dados criptografado pelo cofre que armazene a senha com segurança. Consulte a documentação oficial do Ansible para obter mais informações.

Você pode especificar parâmetros de conexão e autenticação para os juniper.device módulos das seguintes maneiras. Se você não definir explicitamente os valores, os valores padrão serão usados em alguns casos. Os valores padrão são descritos em Entendendo os valores padrão para os módulos da Juniper Networks. Se você definir o valor de um parâmetro em vários locais, o Ansible selecionará o valor com base na precedência da variável, conforme descrito em Noções básicas sobre a precedência de variáveis nos documentos oficiais do Ansible.

  • Variáveis do Ansible—Você pode especificar os valores dos parâmetros de conexão e autenticação usando variáveis normais do Ansible, por exemplo, variáveis definidas em arquivos de inventário ou vault, variáveis de host ou grupo ou argumentos de linha de comando.

  • Arquivo de configuração do cliente SSH — Para conexões SSH, os módulos consultam automaticamente o arquivo de configuração SSH padrão em ~/.ssh/config, se houver. Você pode incluir a ssh_config opção de especificar um arquivo de configuração diferente. Os módulos usam todas as configurações relevantes no arquivo de configuração SSH para a conexão fornecida, a menos que você defina explicitamente variáveis que substituam a configuração.

  • Argumentos do módulo — Os juniper.device módulos suportam a especificação de opções relacionadas à conexão e autenticação para conexões locais (connection: local) como argumentos de módulo de nível superior.

  • Seção do manual vars: — Os juniper.device módulos suportam a especificação de opções relacionadas à conexão e autenticação para conexões locais e persistentes vars: na seção de uma peça, que é descrita em Como definir parâmetros de autenticação nas vars: seção para conexões locais e persistentes.

Entendendo os valores padrão para os módulos da Juniper Networks

Você pode definir explicitamente os parâmetros de conexão e autenticação para módulos que gerenciam dispositivos Junos. Se você não definir um parâmetro, o módulo usará um valor padrão em alguns casos. A Tabela 1 descreve os valores padrão e a precedência de variáveis para parâmetros de conexão comuns para o juniper.device conjunto de módulos. Para obter informações sobre os argumentos aceitos para os módulos individuais, consulte a documentação de referência da API para esse módulo.

Tabela 1: Valores padrão e precedência de variável para parâmetros de conexão

Nome do parâmetro

Aliases de parâmetro

Descrição

Valor padrão e precedência de variável

host

hostname

ip

Nome do host ou endereço IP do dispositivo remoto com o qual a conexão deve ser estabelecida.

{{ inventory_hostname }}

passwd

password

A senha do usuário ou a senha da chave SSH necessária para autenticar com o dispositivo gerenciado.

  1. ANSIBLE_NET_PASSWORD variável de ambiente

  2. Valor especificado para -k ou --ask-pass opção de linha de comando

ssh_config

–

Caminho para um arquivo de configuração do cliente SSH.

Se você omitir esse parâmetro, os módulos usarão o arquivo de configuração SSH no local padrão, se houver.

~/.ssh/config

ssh_private_key_file

ssh_keyfile

Caminho para o arquivo de chave privada SSH usado para autenticar com o dispositivo remoto.

Se você não especificar explicitamente o caminho e nenhum valor padrão for encontrado, o módulo usará o arquivo de chave privada SSH especificado na configuração SSH do usuário ou o padrão específico do sistema operacional.

  1. ANSIBLE_NET_SSH_KEYFILE variável de ambiente

  2. Valor especificado para --private-key ou --key-file opção de linha de comando

  3. nenhum

user

username

Nome de usuário usado para autenticar com o nó gerenciado.

  1. ANSIBLE_NET_USERNAME variável de ambiente

  2. remote_user conforme definido pelo Ansible

  3. USER variável de ambiente

Ao executar os módulos da Juniper Networks, o host argumento é sempre necessário para uma conexão. No entanto, você não precisa especificar explicitamente o host porque o padrão é {{ inventory_hostname }}.

Você pode executar os módulos usando qualquer conta de usuário que tenha acesso ao dispositivo Junos gerenciado. Os privilégios de acesso à conta de usuário do Junos OS são aplicados, e a classe configurada para o usuário do Junos OS determina as permissões. Se você não especificar um usuário, o usuário será definido de acordo com o algoritmo descrito na user Tabela 1. Consulte a documentação do Ansible para obter a precedência usada para definir remote_user, que pode ser definida de várias maneiras, incluindo:

  • -u ou --user opção de linha de comando

  • ANSIBLE_REMOTE_USER variável de ambiente

  • remote_user Definição de configuração

Como definir parâmetros de autenticação nas vars: seção para conexões locais e persistentes

Você pode definir parâmetros de conexão e autenticação para os juniper.device módulos na seção de vars: reprodução. Essa opção é adicional à definição dos parâmetros por outros meios, por exemplo, no arquivo de configuração SSH, no arquivo de inventário do Ansible, como argumentos de linha de comando ou como argumentos de módulo. A vars: seção permite que você defina parâmetros de conexão comuns em um único local que todos os módulos na reprodução podem usar para se conectar a um host. Além disso, determinadas conexões do Ansible exigem o uso da vars: seção quando você define os parâmetros dentro da reprodução, conforme descrito aqui.

Os juniper.device módulos são compatíveis com os seguintes tipos de conexões do Ansible:

  • Conexões locais, que são definidas usando connection: local

  • Conexões persistentes, que são definidas usando connection: juniper.device.pyez

Para conexões locais e persistentes, o Ansible executa módulos localmente no nó de controle. Quando você usa connection: localo , o Ansible estabelece uma conexão separada com o host para cada tarefa na peça que requer uma conexão. Por outro lado, quando você usa connection: juniper.device.pyezo , o Ansible estabelece uma conexão única e persistente com um host, que persiste durante a execução de todas as tarefas na reprodução.

Você usa os mesmos parâmetros de conexão e autenticação para conexões persistentes e para conexões locais, e os valores de parâmetro padrão se aplicam a ambos os tipos de conexões. Para conexões locais, você pode definir os parâmetros de conexão e autenticação na seção ou como argumentos de vars: módulo. Se você definir os parâmetros em ambos os locais, os argumentos do módulo terão precedência. No entanto, ao definir parâmetros em uma jogada para conexões persistentes, você deve definir os vars: parâmetros na seção. Com conexões persistentes, há apenas uma única conexão para todas as tarefas e, portanto, você deve definir os parâmetros globalmente para que eles se apliquem a todas as tarefas nessa reprodução.

O guia estratégico a seguir executa dois juniper.device módulos em cada host no grupo de inventário. A reprodução define a conexão Ansible como juniper.device.pyez, que estabelece uma conexão com cada host que persiste durante a execução de todas as tarefas na reprodução. A seção de reprodução define os parâmetros de vars: autenticação para a conexão persistente. Os user valores e passwd fazem referência a variáveis definidas no arquivo do vault-vars.yaml Vault.

Como autenticar o usuário usando chaves SSH

Os juniper.device módulos permitem que você use chaves SSH para se conectar a um dispositivo Junos ou a um servidor de console conectado ao dispositivo. Para autenticar um usuário usando chaves SSH, primeiro gere as chaves no nó de controle do Ansible e, em seguida, configure as chaves no dispositivo ao qual o módulo se conectará, seja o dispositivo Junos gerenciado ou o servidor de console conectado ao dispositivo Junos.

Gerar e configurar as chaves SSH

Para gerar chaves SSH no nó de controle do Ansible e configurar a chave pública no dispositivo remoto:

  1. No nó de controle do Ansible, gere o par de chaves SSH público e privado do usuário e forneça as opções necessárias, por exemplo:
  2. (Opcional) Carregue a chave no agente de chave SSH nativo. Por exemplo:
  3. Configure a chave pública em cada dispositivo ao qual os módulos se conectarão, o que pode incluir dispositivos Junos ou um servidor de console conectado a um dispositivo Junos.

    O método mais fácil de configurar a chave pública em um dispositivo Junos é carregar um arquivo que contenha a chave pública na conta de usuário apropriada.

  4. Verifique se a chave funciona efetuando login no dispositivo usando a chave.

Usar chaves SSH em playbooks do Ansible

Depois de gerar o par de chaves SSH e configurar a chave pública no dispositivo remoto, você pode usar a chave para se conectar ao dispositivo. Os módulos da Juniper Networks consultam automaticamente o arquivo de configuração SSH padrão em ~/.ssh/config, se houver. Você também pode definir a ssh_config opção para especificar um arquivo de configuração diferente. Os módulos usam todas as configurações relevantes no arquivo de configuração SSH para a conexão fornecida, a menos que você defina explicitamente variáveis que substituam a configuração. Além disso, os módulos procuram automaticamente chaves no local padrão e chaves que estão ativamente carregadas em um agente de chave SSH.

Para definir configurações específicas para chaves SSH, você pode incluir os argumentos apropriados em seu manual do Ansible. Defina os argumentos no local apropriado para seu conjunto de módulos e conexão do Ansible. Por exemplo, para peças que usam os juniper.device módulos com uma conexão persistente, você definiria as vars: configurações na seção. Os seguintes fatores determinam quais argumentos incluir no manual:

  • A localização da chave

  • Se a chave está ativamente carregada em um agente de chave SSH

  • Se a chave é protegida por senha

  • Se o arquivo de configuração SSH do usuário já define as configurações para esse host

Os exemplos a seguir descrevem como lidar com os diferentes cenários:

  • Para se conectar a um dispositivo Junos usando chaves SSH que são carregadas ativamente no agente de chave SSH nativo ou que estão no local padrão e não têm proteção por senha, você não precisa definir nenhum argumento relacionado à conexão ou autenticação, a menos que sejam diferentes do padrão.

  • Para se conectar a um dispositivo Junos usando chaves SSH que não estão no local padrão e não têm proteção por senha, defina o ssh_private_key_file argumento como o caminho do arquivo de chave privada SSH. Por exemplo:

    Como alternativa, você pode especificar o caminho da chave privada SSH: definindo-a no arquivo de configuração SSH; definir a ANSIBLE_NET_SSH_KEYFILE variável de ambiente; ou definindo a --private-key opção de linha de comando OR --key-file ao executar o manual.

  • Para se conectar a um dispositivo Junos usando um arquivo de chave SSH protegido por senha, que é o método recomendado, você pode fazer referência à senha do arquivo de chave SSH de várias maneiras. Por exemplo, você pode usar o passwd argumento, definir variáveis do Ansible ou fornecer opções de linha de comando.

    O exemplo a seguir executa o guia estratégico com a --ask-pass opção de linha de comando para solicitar a senha ao usuário:

    Observação: É responsabilidade do usuário obter a senha do arquivo de chave SSH de maneira segura e apropriada para seu ambiente. É uma prática recomendada solicitar a senha ao executar o manual ou armazenar a variável usando um cofre criptografado em vez de armazenar as credenciais em um formato não criptografado.

    Para obter mais informações sobre como usar um prompt ou arquivo de cofre criptografado para a senha da chave SSH, consulte Como autenticar o usuário usando um guia estratégico ou prompt de senha de linha de comando e Como autenticar o usuário usando um arquivo criptografado do cofre do Ansible.

Para obter instruções sobre como usar chaves SSH para se conectar a um servidor de console, consulte Como autenticar por meio de um servidor de console.

Como autenticar o usuário usando um guia estratégico ou um prompt de senha de linha de comando

Para autenticar um usuário que executa módulos do Ansible, você pode solicitar as credenciais do usuário ao executar o playbook. Por exemplo, você pode definir um prompt interativo no manual ou executar o guia estratégico com a -k opção de linha de comando ou --ask-pass para solicitar a senha. Quando as chaves SSH estão em uso, a senha fornecida é usada como a senha da chave SSH privada. Quando a autenticação baseada em senha é usada, a senha fornecida é usada como a senha do dispositivo.

Para definir um prompt interativo no manual para obter a senha do usuário ou a senha da chave SSH:

  1. Inclua o código que vars_prompt: solicita a senha do usuário ou a senha da chave SSH (e, opcionalmente, o nome de usuário) e armazena o valor em uma variável.
  2. Defina os user parâmetros and para passwd que cada um faça referência à sua respectiva variável.
  3. Inclua as tarefas a serem executadas.
  4. Execute o manual, que solicita o nome de usuário e a senha. O terminal não ecoa a senha quando você a digita porque a variável está definida como private: yes.

Como alternativa, você pode executar um guia estratégico com a -k opção de linha de comando ou --ask-pass para solicitar a senha ou senha. Considere o seguinte manual, que usa o nome de usuário padrão:

Execute o guia estratégico e inclua a -k opção de linha de comando or --ask-pass , que solicita a senha e não ecoa a senha na linha de comando.

Como autenticar o usuário usando um arquivo criptografado do Ansible Vault

Você pode usar o cofre do Ansible para armazenar com segurança senhas e outros valores confidenciais de conexão e autenticação em um arquivo de dados criptografado pelo cofre. Seu playbook pode fazer referência a essas variáveis no local apropriado para seu conjunto de módulos e tipo de conexão do Ansible, por exemplo, na seção da reprodução ou como argumentos de vars: módulo.

Este exemplo usa o cofre do Ansible para criar e criptografar um novo arquivo de cofre. Você também pode criptografar variáveis individuais ou usar vários arquivos criptografados com senhas diferentes. Consulte a documentação oficial do Ansible para obter informações detalhadas sobre como usar o cofre do Ansible para criptografar conteúdo e arquivos.

Para criar e usar um arquivo de cofre do Ansible contendo variáveis necessárias, incluindo senhas:

  1. Crie um arquivo de dados criptografado pelo cofre e especifique a senha necessária para criptografar, descriptografar, editar e usar o arquivo de dados.
  2. Defina as variáveis necessárias no arquivo e salve-o.
  3. Verifique se o arquivo está criptografado.
  4. No playbook, inclua o arquivo de variável criptografado do cofre e faça referência às variáveis necessárias no local apropriado para seus módulos e tipo de conexão do Ansible.
    Observação:

    Se, em vez disso, você definir o real user e passwd as variáveis no vault, os módulos as selecionarão automaticamente e você não precisará defini-las explicitamente no manual.

  5. Execute o guia estratégico com a opção que solicita --ask-vault-pass a senha do cofre.

Como autenticar por meio de um servidor de console

Os módulos Ansible da Juniper Networks podem se conectar a dispositivos Junos por meio de um servidor de console. Para conexões SSH por meio de um servidor de console, você precisa fornecer as credenciais de autenticação para o servidor de console e o dispositivo Junos. Você pode usar uma senha de dispositivo ou um arquivo de chave SSH protegido por senha para a autenticação do servidor de console.

Para se conectar a um dispositivo Junos por meio de um servidor de console, você deve fornecer os seguintes parâmetros em seu playbook, se não houver um valor padrão ou se o valor padrão não for apropriado:

  • host— Nome do host ou endereço IP do servidor de console

  • user e passwd— Credenciais de login do Junos OS

  • cs_user—Nome de usuário do servidor de console

  • cs_passwd— Senha do dispositivo ou senha do arquivo de chave SSH necessária para autenticar com o servidor de console

  • port— Porta, se diferente do padrão

No exemplo a seguir, as credenciais para o usuário do Junos OS e o usuário do servidor de console são definidas em um arquivo de cofre do Ansible. As variáveis do vault são então referenciadas no playbook. Nesse caso, o cs_passwd argumento é a senha da chave SSH especificada no ssh_private_key_file argumento.