Criei um script em Python para enviar comandos para um lista de devices Cisco (roteadores e switches rodando IOS) e salvar o output.
O script tem sido bastante útil, podendo ser usado para fazer backup dos equipamentos e também para enviar comandos que são comuns para a lista de dispositivos, como configuração de logging, snmp, dhcp snooping, configuração de interfaces, e etc.
Meus conhecimentos de Python são limitados, então o script é bem básico. Também foi intensional ser simples o suficiente para que qualquer um possa usar, sem precisar saber de programação.
Para usar o script você vai precisar do python e dos módulos netmiko, getpass, csv, logging e datetime.
Usando o script
1) Instale o Python e os módulos necessários usando o pip.
2) Baixe o repositório do Github (ou ao menos os arquivos send_commands.py, devices_to_configure.csv e commands_to_send.txt, salvando-os na mesma pasta).
3) No arquivo devices_to_configure.csv informe a porta (22 ou 23) e o IP dos equipamentos que quer configurar/salvar os outputs.
4) No arquivo commands_to_send.txt coloque os comandos que quer enviar (o script inicia no modo privilegiado).
5) Execute o script: python send_commands.py.
Na linha de comando é possível acompanhar o andamento, e o output dos comandos executados são salvos no arquivo log_file.txt, gerado na mesma pasta do script.
Mais informações no repositório do Github.
Até a próxima.
Olá André, sou o Alessandro da Marimex, fiz algo parecido aqui para a empresa, um pouco mais elaborado, com envio de email, etc, para poder praticar os conhecimentos em python.
Também sou iniciando em python, agora tô fazendo um programa para coletar logs no event viewer para não ter que usar servidor de syslog, vai salvar no SQL, está praticamente pronto. Ainda não coloquei no github, mas se tiver interesse posso compartilhar.
Python é uma coisa que eu quero me aprofundar e a melhor forma é praticando.
https://github.com/alopes-sts/Backup-de-switches-com-Python
Sensacional Alessandro. O seu script segue uma linha diferente do meu, já que é focado no backup.
Esse que postei, apesar de mais simples, pode ser usado para configuração “em lote” também. enviando outros comandos.
Obrigado por compartilhar.
Fala André, bom dia!
Muito bom seu script cara, parabéns!
Só uma coisa, eu vi que ele já entra em modo de configuração, qual linha tem que remover pra ele não entrar em conf t?
Abraço!
Olá Gui, o script usa a biblioteca Netmiko, que faz o login e já entra no modo de configuração.
Quando quero executar algum comando show, por exemplo, no script (arquivo com os comandos) eu coloco o “exit” na primeira linha.
Olá ! me chamo João Victor e quis deixar meu comentário informando que o código no processo de backup das informações, sempre não consegue coletar todas as informações ao usar o comando sh run ( abaixo segue o log gerado ), como podem vêr falta muita coisa, e o mesmo já deixa de lado e segue para o próximo da lista
OBS: estou começando no universo Python. Assim como, estou fazendo uso do comando: terminal length 0 antes de sh run pra ele mostrar todas as config existente na running e com isso fazer print dessa saída.
———————–
Logs
———————–
configure terminal
Enter configuration commands, one per line. End with CNTL/Z.
SW-01-2960X(config)#end
SW-01-2960XX#terminal length 0
SW-01-2960X#sh run
Building configuration…
Current configuration : 6604 bytes
!
! Last configuration change at 11:00:41 BRT Tue Mar 21 2023 by –
!
version 12.2
no service pad
service timestamps debug datetime msec
service timestamps log datetime msec
no service password-encryption
!
hostname SW-01-2960X
configure terminal
Enter configuration commands, one per line. End with CNTL/Z.
SW-02-2960X(config)#end
SW-02-2960X#terminal length 0
SW-02-2960X#sh run
Building configuration…
Current configuration : 6581 bytes
!
! Last configuration change at 11:00:48 BRT Tue Mar 21 2023 by –
! NVRAM config last updated at 13:51:20 BRT Wed Apr 13 2022 by –
!
version 12.2
no service pad
service timestamps debug datetime msec
service timestamps log datetime msec
no service password-encryption
!
hostname SW-02-2960X
Olá João, obrigado por alertar. Fiz um teste aqui e realmente não esta funcionando.
A coleta de informações funciona (ativando o debug você verá o output completo), mas o print (tela e arquivo) está sendo interrompido.
Talvez no futuro eu investigue para ver o que está ocorrendo.