Autenticar usuários do Junos PyEZ
Os aplicativos Junos PyEZ podem autenticar usuários usando uma senha ou outros mecanismos de autenticação SSH padrão.
Visão geral da autenticação de usuário do Junos PyEZ
O Junos PyEZ permite que você se conecte diretamente e gerencie dispositivos Junos usando uma conexão de console serial, telnet ou uma sessão NETCONF sobre SSH. O Junos PyEZ também oferece suporte à conexão a um dispositivo por meio de uma conexão telnet ou SSH a um servidor de CONSOLE console conectado à porta do dispositivo. Além disso, o Junos PyEZ pode se conectar a um dispositivo por meio de um dispositivo intermediário, como um bastião ou host de salto.
Os dispositivos remotos devem ser capazes de autenticar o usuário usando uma senha ou outros mecanismos de autenticação SSH padrão, dependendo do método de conexão. Quando você gerencia dispositivos Junos por meio de uma conexão SSH, a maneira mais conveniente e segura de acessar um dispositivo é configurar chaves SSH. As chaves SSH permitem que o dispositivo remoto identifique usuários confiáveis.
Você pode realizar operações de dispositivo usando qualquer conta de usuário que tenha acesso ao dispositivo Junos gerenciado. Você pode definir explicitamente o usuário ao criar uma nova instância da jnpr.junos.device.Device classe. Se você não especificar um usuário, o usuário usará como padrão o $USER valor da variável de ambiente.
Para conexões SSH, o Junos PyEZ consulta automaticamente o arquivo de configuração SSH padrão em ~/.ssh/config, se houver. Você também pode incluir ssh_config na lista de Device argumentos para especificar um arquivo de configuração diferente. O Junos PyEZ usa todas as configurações relevantes no arquivo de configuração SSH que não são substituídas pelos argumentos na Device lista de argumentos, como o usuário ou o arquivo de identidade.
Ao usar o SSH para se conectar a um dispositivo, o Junos PyEZ primeiro tenta a autenticação baseada em chave pública SSH e, em seguida, tenta 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 chave 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.
Obtenha credenciais de maneira segura e apropriada para o seu ambiente. Como prática recomendada, solicite credenciais sempre que executar o script em vez de armazená-las em um formato não criptografado.
As seções a seguir discutem os diferentes métodos de autenticação.
Autentique usuários do Junos PyEZ usando uma senha
Para autenticar um usuário do Junos PyEZ usando uma senha:
Autentique usuários do Junos PyEZ usando chaves SSH
Para usar chaves SSH em um aplicativo Junos PyEZ, você deve primeiro gerar as chaves no servidor de gerenciamento de configuração. Em seguida, configure a chave pública em cada dispositivo ao qual o cliente Junos PyEZ se conectará. Os dispositivos podem incluir um dispositivo Junos, um servidor de console ou um bastião ou host de salto. Para usar as chaves, você deve incluir os argumentos apropriados na lista de Device argumentos.
O Junos PyEZ pode utilizar chaves SSH que são carregadas ativamente em um agente de chave SSH, chaves que são geradas no local padrão ou em um local definido pelo usuário e chaves que usam ou renunciam à proteção por senha. Se os Device argumentos não especificarem uma senha ou fizerem referência a um arquivo de chave SSH, o Junos PyEZ primeiro verifica as chaves SSH que estão ativamente carregadas no agente de chaves SSH e, em seguida, verifica as chaves SSH no local padrão. Ao se conectar a um servidor de console, as chaves SSH devem ser protegidas por senha.
As seções a seguir descrevem as etapas para gerar as chaves SSH, configurar as chaves em dispositivos remotos e usar as chaves para se conectar ao dispositivo gerenciado:
Gerar e configurar chaves SSH
Para gerar chaves SSH no servidor de gerenciamento de configuração e configurar a chave pública em dispositivos remotos:
Chaves SSH de referência em aplicativos Junos PyEZ
Depois de gerar o par de chaves SSH e configurar a chave pública no dispositivo remoto, os aplicativos Junos PyEZ podem usar a chave para se conectar ao dispositivo. Para usar a chave, inclua os argumentos apropriados no Device construtor. Os Device argumentos são determinados por:
-
A localização da chave
-
Se a chave está ativamente carregada em um agente de chave SSH, como ssh-agent
-
Se a chave é protegida por senha
-
Se o arquivo de configuração SSH do usuário já define as configurações para esse host
As seções a seguir descrevem os vários cenários:
- Usar um agente de chave SSH com chaves carregadas ativamente
- Use chaves SSH sem proteção por senha
- Use chaves SSH protegidas por senha
Usar um agente de chave SSH com chaves carregadas ativamente
Você pode usar um agente de chave SSH ou agente de autenticação para armazenar chaves privadas com segurança e evitar redigitar repetidamente a senha para chaves protegidas por senha. Um cliente Junos PyEZ pode se conectar a um dispositivo usando chaves SSH que são carregadas ativamente no agente SSH. Por padrão, se os Device argumentos não especificarem uma senha ou fizerem referência a um arquivo de chave SSH, o Junos PyEZ primeiro verifica as chaves SSH que estão ativamente carregadas no agente de chaves SSH e, em seguida, verifica se há chaves SSH no local padrão. Observe que Device pode definir o arquivo de chave SSH explicitamente na lista de argumentos ou por meio de configurações no arquivo de configuração SSH.
Para se conectar a um dispositivo usando chaves SSH que são carregadas ativamente no agente de chave SSH nativo:
-
Para se conectar diretamente a um dispositivo Junos, você precisa fornecer apenas o nome de host ou endereço IP necessário na lista de
Deviceargumentos.dev = Device(host='router.example.com')
-
Para se conectar a um dispositivo Junos por meio de um bastião ou host de salto, defina
hostcomo o nome de host ou endereço IP do dispositivo Junos e inclua oproxy_commandargumento que define a conexão por meio do host de salto.dev = Device(host='router.example.com', proxy_command="ssh -W %h:%p -q jumphost.example.com")
O Device construtor também dá suporte allow_agent ao argumento para fornecer um controle mais preciso sobre quando usar o agente de chave SSH. A Tabela 1 descreve as configurações.
| allow_agent valores | Comportamento |
|---|---|
|
|
A conexão SSH usa chaves no agente SSH somente se os |
|
|
A conexão SSH usa chaves carregadas no agente SSH. |
|
|
A conexão SSH não usa chaves do agente SSH. |
Por exemplo, suponha que você carregue chaves SSH para um host no agente de chave SSH. Além disso, seu arquivo de configuração SSH contém uma entrada de host que define a IdentityFile opção com o arquivo de chave privada para esse host. Em sua aplicação Junos PyEZ, você cria uma instância e Device define apenas o host argumento. Por padrão, Device usa o arquivo de chave privada definido por IdentityFile. Como os argumentos fazem referência a um arquivo de chave privada, o Device Junos PyEZ não verifica o agente de chave SSH. Se o arquivo de chave privada tiver uma senha, a conexão falhará porque nenhuma senha foi fornecida. Assim, para usar o agente SSH, mas manter a IdentityFile opção no arquivo de configuração SSH, você pode definir allow_agent=True.
dev = Device(host='router.example.com', allow_agent=True)
Use chaves SSH sem proteção por senha
O Junos PyEZ permite que um cliente se conecte diretamente a um dispositivo Junos usando chaves privadas SSH que não têm proteção por senha. No entanto, não recomendamos o uso de chaves privadas SSH com uma senha vazia. O Junos PyEZ não oferece suporte à conexão com um servidor de console usando chaves privadas SSH com uma senha vazia.
Para se conectar a um dispositivo Junos usando chaves SSH que estão no local padrão e não têm proteção por senha:
-
Na lista de
Deviceargumentos, você precisa fornecer apenas o nome de host ou endereço IP necessário.dev = Device(host='router.example.com')
O Junos PyEZ primeiro verifica as chaves SSH que estão carregadas no agente de chaves SSH ativo e, em seguida, verifica as chaves SSH no local 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:
-
DeviceNa lista de argumentos, defina ossh_private_key_fileargumento como o caminho da chave privada SSH.dev = Device(host='router.example.com', ssh_private_key_file='/home/user/.ssh/id_rsa_dc')
Observação:Se o arquivo de configuração SSH do usuário já especificar o caminho do arquivo de chave privada SSH local para um determinado host, você poderá omitir o
ssh_private_key_fileargumento naDevicelista de argumentos. A inclusão dossh_private_key_fileargumento substitui qualquer valor existenteIdentityFiledefinido para um host no arquivo de configuração SSH do usuário.
Use chaves SSH protegidas por senha
Os clientes Junos PyEZ podem usar chaves SSH protegidas por senha para se conectar diretamente a um dispositivo Junos, a um dispositivo Junos por meio de um bastion ou host de salto ou a um servidor de console conectado ao dispositivo. As seções a seguir descrevem como definir explicitamente os Device argumentos para chaves SSH protegidas por senha. Para usar chaves protegidas por senha carregadas em um agente de chave SSH ativo, consulte Usar um agente de chave SSH com chaves carregadas ativamente.
- Conecte-se diretamente a um dispositivo Junos
- Conectar-se por meio de um host de salto
- Conectar-se por meio de um servidor de console
Conecte-se diretamente a um dispositivo Junos
Para se conectar diretamente a um dispositivo Junos usando uma chave SSH protegida por senha:
-
Inclua um código que solicite a senha da chave privada SSH e armazene o valor em uma variável.
from jnpr.junos import Device from getpass import getpass key_password = getpass('Password for SSH private key file: ')
-
Na lista de
Deviceargumentos:-
Defina o
passwdargumento para fazer referência à variável que contém a senha do arquivo de chave SSH. -
Defina o
ssh_private_key_fileargumento como o caminho da chave privada, se a chave não estiver no local padrão e o arquivo de configuração SSH ainda não definir o caminho do arquivo de chave 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()
-
Conectar-se por meio de um host de salto
Para se conectar a um dispositivo Junos por meio de um bastion ou jump host usando chaves SSH protegidas por senha para ambos os dispositivos:
-
Inclua um código que solicite a senha da chave privada SSH para o dispositivo de rede e armazene o valor em uma variável.
from jnpr.junos import Device from getpass import getpass host = "router1.example.com" junos_passwd = getpass("SSH key passphrase for network device: ")
-
Na lista de
Deviceargumentos:-
Defina o
hostargumento para o nome de host ou endereço IP do dispositivo Junos. -
Defina o
passwdargumento para fazer referência à variável que contém a senha do arquivo de chave SSH para o dispositivo Junos. -
Defina o
ssh_private_key_fileargumento como o caminho da chave privada para o dispositivo Junos, se a chave não estiver no local padrão e o arquivo de configuração SSH ainda não definir o caminho do arquivo de chave privada. -
Inclua o
proxy_commandargumento e defina a conexão para o host de salto, incluindo o usuário e o arquivo de identidade, se necessário.
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()
-
Quando você executa o script, ele solicita as senhas das chaves privadas.
Conectar-se por meio de um servidor de console
Para se conectar a um dispositivo Junos por meio de um servidor de console que usa um arquivo de chave SSH protegido por senha:
-
Inclua um código que solicite as credenciais de login para o dispositivo Junos e armazene cada valor em uma variável.
from jnpr.junos import Device from getpass import getpass junos_username = input('Junos OS username: ') junos_password = getpass('Junos OS password: ')
-
Inclua um código que solicite o nome de usuário do servidor de console e a senha da chave privada e armazene cada valor em uma variável.
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: ')
-
Na lista de
Deviceargumentos:-
Defina o
hostargumento como o nome do host ou endereço IP do servidor de console. -
Defina os
userargumentos andpasswdpara as variáveis que contêm as credenciais de login do Junos OS. -
Defina o
cs_userargumento como a variável que contém o nome de usuário do servidor de console. -
Defina o
cs_passwdargumento para a variável que contém a senha do arquivo de chave SSH. -
Defina o
ssh_private_key_fileargumento como o caminho da chave privada, se a chave não estiver no local padrão e o arquivo de configuração SSH ainda não definir o caminho do arquivo de chave privada. - Defina o
portargumento como a porta TCP que mapeia para o dispositivo TTY no servidor de console.
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) # ...
-