Qual é a diferença entre paramiko e netmiko?

Qual é a diferença entre paramiko e netmiko?

Quando se trata de networking, há uma ampla gama de perspectivas e não se pode dominar como interagir com todos os dispositivos no mundo real. No entanto, todos os dispositivos de rede compartilham funcionalidade semelhante que, quando dominada, são automatizáveis.

Como mencionado em meus outros tutoriais, os programadores são preguiçosos e sempre procuram melhorar a eficiência-o que faz o mínimo de trabalho 🙂-e quando se trata de automatizar problemas relacionados à rede, muitos costumam aproveitar a chance.

No guia rápido de hoje, apresentarei automatizando o SSH usando duas bibliotecas Python populares: Paramiko e Netmiko. Criaremos scripts Python simples usando as duas bibliotecas para automatizar o SSH e interagir com dispositivos de rede.

Eu escolho essa abordagem porque um guia focado principalmente nas diferenças entre Paramiko e Netmiko seria muito curto-uma tabela simples seria suficiente e sem concreto. Ao adotar essa abordagem, você poderá experimentar mais com eles e ver qual faz o quê e como.

Vamos começar:

O que é paramiko?

O site oficial define Paramiko da seguinte maneira:

“Paramiko é um python (2.7, 3.4+) Implementação do protocolo SSHV2 que fornece funcionalidade de cliente e servidor.”

Espero que tenha sido claro. Fundação, isso significa Paramiko é uma biblioteca Python para interagir com SSH.

Agora:

Quando queremos fazer login em um servidor, sabemos que vamos ao Terminal-CMD, Xterm, Mobaxterm ou apenas ao Gnome Terminal-Login, depois execute comandos.

Vamos ver como o Paramiko pode ajudar com isso.

Como instalar o paramiko

Para usar o Paramiko, precisamos instalá -lo. Você deve ter Python - de preferência Python 2 - instalado em sua máquina. Usando PIP, digite o comando abaixo para instalar o paramiko.

sudo pip install paramiko
Python -m pip install paramiko

Se você deseja construir a partir da fonte, consulte o repositório oficial do Paramiko Github usando o recurso fornecido:

https: // github.com/paramiko/paramiko

Conectando -se ao SSH usando o paramiko

Para conectar-se ao SSH usando o paramiko, usamos o método Connect (), que requer o parâmetro do nome do host-também suporta outros parâmetros, mas como não exigimos isso, podemos ignorá-los por enquanto.

CONNECT (nome do host, porta = 22, nome de usuário = nenhum, senha = nenhum, pkey = nenhum, key_filename = nenhum, timeout = nenhum, allow_agent = true, look_for_keys = true, compact = false, sock = nenhum, gss_auth = false, gss_kex = False, gss_deleg_creds = true, gss_host = nenhum, banner_timeout = nenhum, auth_timeout = nenhum, gss_trust_dns = true, senha = nenhum, desabilaped_algorithms = nenhum)

Usando esta função, que está disponível em paramiko. Cliente.Sshclient.Connect (), se conecta ao nome do host especificado e o autentica. O sistema de destino é verificado contra as chaves do sistema local existentes (confiáveis).

Se você possui um arquivo host específico, pode usar o método load_host_keys () e definir o cliente Paramiko SSH para adicionar qualquer host desconhecido a Paramiko.Autoaddpolicy (). Se você estiver usando o cliente em sistemas não confiáveis, evite usar o paramiko.Autoaddpolicy.

Conectando SSH com uma senha

A partir do método Connect, podemos ver que temos o nome de usuário e os parâmetros de senha que podemos usar para conectar ao sistema. Considere o código abaixo para conectar o SSH via nome de usuário e senha.

De Paramiko Import Util, Sshclient, Autoaddpolicy
cliente = sshclient ()
cliente.load_system_host_keys ()
cliente.load_host_keys ("/home/linuxhint/.ssh/conhecido_hosts ")
cliente.set_missing_host_key_policy (autoaddpolicy ())
cliente.Connect (HostName = "Linuxhint.com ", nome de usuário =" admin ", senha =" adminpassword ")
cliente.fechar()

Se você encontrar problemas ao importar a classe Paramiko SSHCLIENT, consulte a seguinte pergunta StackOverflow:

https: // Stackoverflow.com/questões/29378234/python-import-paramiko-error-cannot-import-name-util

Conectando SSH via chave

Como todos sabemos, conectar o SSH via chave é mais seguro do que usar uma senha bruta. Paramiko sabe disso e permite que você passe o arquivo -chave e se conecte ao sistema de destino.

Considere o código abaixo.

De Paramiko importar sshclient, autoaddpolicy
cliente = sshclient ()
cliente.load_system_host_keys ()
cliente.load_host_keys ('/home/linuxhint/.ssh/conhecido_hosts ')
cliente.set_missing_host_key_policy (autoaddpolicy ())
cliente.Connect ('Linuxhint.com ', nome de usuário =' admin ', key_filename =' ssh_key.PEM ', Passphrase =' AdminPasshrase ')
cliente.fechar()

Executando comandos sobre SSH

Depois de obter acesso ao sistema usando SSH (sobre Paramiko), você pode executar uma série de comandos. Considere o seguinte snippet de código:

de paramiko importar sshclient
cliente = sshclient ()
cliente.load_system_host_keys ()
cliente.Connect ('Linuxhint.com ')
stdin, stdout, stderr = cliente.Exec_Command ('Bash')
stdin.fechar()
stdout.fechar()
stderr.fechar()
cliente.fechar()

Neste ponto, você sabe como usar a Biblioteca Paramiko para automatizar o SSH. Como você pode imaginar, este não é um guia abrangente do Paramiko, e não mergulhamos em detalhes relacionados ao que a ferramenta faz. O objetivo era mostrar sua implementação.

Para mais informações, consulte materiais mais abrangentes, como:

https: // docs.Paramiko.org/pt/estável/
https: // github.com/paramiko/paramiko

O que é Netmiko?

O Netmiko é muito popular e semelhante ao Paramiko, com algumas diferenças significativas:

  • Suporte ao dispositivo
  • Desempenho

Ao trabalhar em redes do mundo real, você encontrará vários modelos de dispositivos. Assim, você precisa de uma ferramenta confiável que possa ajudá -lo a automatizar o processo. Em alguns casos, você não pode usar o Paramiko devido às limitações de suporte ao dispositivo, levando a atrasos e falhas-você pode verificar os dispositivos suportados na documentação oficial. Também é consideravelmente mais lento que o netmiko.

Paramiko é mais um módulo SSH genérico que você pode usar para automatizar tarefas SSH específicas. Por outro lado, o Netmiko é mais amplo e bem otimizado para gerenciar dispositivos de rede, como interruptores e roteadores.

Abstração é a outra vantagem de usar o netmiko. Netmiko fornece uma função simples que você pode usar para desativar a paginação. Por exemplo, uma saída da sessão SSH pode ser mais de uma página. Usando sessões SSH regulares, você precisará adicionar um espaço semelhante a uma entrada para mostrar a próxima página. Netmiko fornece uma maneira de substituir isso.

As vantagens do netmiko sobre Paramiko são:

  • Conecte -se automaticamente via SSH a dispositivos de rede.
  • Ele fornece uma execução mais simples de comandos e saída de dados de programas.
  • Fornece funcionalidade mais simples para comandos de configuração, incluindo ações de confirmação.
  • Suporte de vários dispositivos entre fornecedores e plataformas de dispositivos de rede.

Como instalar o netmiko

Instalar o Netmiko também é relativamente fácil:

Tudo o que você precisa fazer é garantir que você tenha o Python e o PIP instalado no seu sistema e execute o comando:

pip install netmiko
python -m pip install netmiko

Conectando -se ao SSH usando Netmiko

Conectar -se às sessões SSH do dispositivo usando o netmiko é muito simples. Lembre -se de que o Netmiko é mais otimizado para dispositivos como roteadores e não SSH genérico.

Considere o trecho de código abaixo.

# Módulos de importação
De Netmiko Import Connecthandler
# Informações do dispositivo em formato de dicionário.
Device_Config = "Device_Type": "Cisco_ios",
"IP": "192.168.0.1 ",
"Nome de usuário": "Admin",
"Senha": "senha",
"Secreto": "Senha"

Connection = Connecthandler (** Device_Config)

Usando o código simples acima, você terá uma conexão SSH com o dispositivo. Você também pode passar as informações do dispositivo diretamente em vez de passá -las para um dicionário.

Depois de ter uma sessão SSH, você pode executar comandos usando a função Send_Command (). As funções suportadas pelo Netmiko incluem:

Métodos Netmiko comumente usados:

  • net_connect.send_Command () - Esta função envia comandos para baixo um canal de rede e retorna a saída com base no padrão.
  • net_connect.send_command_timing () - Retorna a saída com base no tempo de um comando enviado por um canal de rede.
  • net_connect.send_config_set () - aplica definições de configuração a dispositivos remotos.
  • net_connect.send_config_from_file () - Aplica as definições de configuração de um arquivo externo
  • net_connect.Save_config () - Exporta e salva a configuração em execução como a configuração de inicialização.
  • net_connect.Ativar () - Consulta o dispositivo para ativar o modo Ativar.
  • net_connect.find_prompt () - Retorne o prompt de roteador atual
  • net_connect.commit () - executa comandos de compromisso em dispositivos como Juniper e iOS -xr
  • net_connect.desconect () - encerra as sessões
  • net_connect.write_channel () - Ativa a gravação de baixo nível
  • net_connect.read_channel () - Ativa a leitura de baixo nível.

Como mencionado anteriormente, este não é um guia sobre como usar o netmiko, mas uma direção simples do que Netmiko e Paramiko são. Verifique a documentação oficial para obter mais informações.

https: // github.com/ktbyers/netmiko

Conclusão

Neste guia rápido, discutimos como usar o Paramiko para conexões SSH genéricas e gerenciamento de dispositivos de rede Netmiko, ilustrando as diferenças entre os dois.

Concluir:

Paramiko Netmiko
Útil para uso genérico de ssh Mais útil para configuração de dispositivo de rede.
Suporte limitado para uma ampla gama de dispositivos de rede. Suporta uma ampla gama de dispositivos de rede.