Cygwin: é um ambiente Linux-like para
Windows. Ele é composto de uma série de ferramentas que provêm as
mesmas funcionalidades de um shell Linux na linha de comandos do
Windows. Essas ferramentas podem ser utilizadas para automatizar
tarefas. É claro, você pode também utilizar Linux diretamente para
executar essas tarefas. A minha escolha por Cygwin foi devido a
necessidades específicas minhas.
Pumpkin TFTP: É o melhor software de
TFTP disponível, na minha opinião. É utilizado para backup das
configurações, software, etc… Você pode optar por outro software de sua
preferência, mas eu recomendo fortemente o Pumpkin.
Netcat: segundo o site oficial,
Netcat é o canivete suiço do TCP/IP. É uma ferramenta que lê e grava
dados através de uma conexão de rede. Eu utilizo o Netcat para conexão
remota aos roteadores, simulando ao telnet. O Netcat provê
funcionalidades adicionais ao telnet, quando usado em scripts de shell.
O Netcat está incluído nas ferramentas do Cygwin, caso você resolva
utilizá-lo.
Scripts: desenvolvi uma série de
scripts em shell para as tarefas rotineiras em redes Cisco, como
alteração de senhas, backup de configurações, inventário de Hardware.
Todos scripts têm o mesmo funcionamento básico: um arquivo contendo a
lista com os endereços IP dos equipamentos é percorrido, conexão aos
equipamentos e a execução dos comandos desejados. A seguir, mostraremos
alguns exemplos desses scripts:
Alteração de Senha de Telnet e Enable
Este script conecta aos equipamentos e altera a senha de enable e telnet. O arquivo devicelist contém a lista dos equipamentos que devem ter sua senha alterada. Seu formato é:
pae36rt01 10.1.1.1
spo36rt01 10.1.1.5
bhe17rt01 10.1.1.7
sdr28rt02 10.1.1.13
spo36rt01 10.1.1.5
bhe17rt01 10.1.1.7
sdr28rt02 10.1.1.13
Abaixo o script:
#!/bin/bash
########################################################
# trocasenha.sh: conecta aos routers para alteração de senha
# Pre-requisito: devicelist: arquivo contendo lista de equipamentos
#
#
########################################################
# trocasenha.sh: conecta aos routers para alteração de senha
# Pre-requisito: devicelist: arquivo contendo lista de equipamentos
#
#
########################################################
# porta do telnet
porta=23
porta=23
# percorre devicelist e lê o nome do equipamento e seu endereço IP
cat devicelist | while read rtrname ipaddress
do
do
# sequência de comandos para login nos routers e troca das senhas
comando=’oldpw\nenable\noldpw\nconf t\nline vty 0 4\npassword newpw\nexit\nenable secret newpw\nexit\nexit\nwrite mem\nexit\n’
# executa os comandos e grava um arquivo de log
echo -e $comando|nc $ipaddress $porta > /var/log/alterasenha.log
comando=’oldpw\nenable\noldpw\nconf t\nline vty 0 4\npassword newpw\nexit\nenable secret newpw\nexit\nexit\nwrite mem\nexit\n’
# executa os comandos e grava um arquivo de log
echo -e $comando|nc $ipaddress $porta > /var/log/alterasenha.log
done
No script acima, a sequência de comandos a serem aplicados nos roteadores é armazenada na váriavél comando.
A sequência de escape \n separando os comandos corresponde a tecla
enter pressionada no teclado. Notem, em itálico, as senhas antigas para
login e as novas senhas. Estas senhas devem ser alteradas, conforme a
sua configuração. Também recomendo que os scripts sejam armazenados e
executados somente de computadores confiáveis.
A próxima sequência conecta aos routers e executa os
comandos. O resultado da alteração é gravando do arquivo
alterasenha.log. Como esse arquivo contêm as novas senhas em modo
texto, ele deve ser apagado após a verificação.
Abaixo uma forma mais simplificada do mesmo script,
mas com os comandos armazenados num arquivo externo. A desvantagem
desse método é não poder usar variáveis nos comandos aplicados ao
router. Este mesmo método pode ser aplicado para todos os outros
scripts neste artigo:
#!/bin/bash
########################################################
# trocasenha2.sh: conecta aos routers para alteração de senha
# Pre-requisito: devicelist: arquivo contendo lista de equipamentos
#
#
########################################################
# trocasenha2.sh: conecta aos routers para alteração de senha
# Pre-requisito: devicelist: arquivo contendo lista de equipamentos
#
#
########################################################
# porta do telnet
porta=23
porta=23
# percorre devicelist e lê o nome do equipamento e seu endereço IP
cat devicelist | while read rtrname ipaddress
do
nc $ipaddress $porta < commands.in
done
cat devicelist | while read rtrname ipaddress
do
nc $ipaddress $porta < commands.in
done
O arquivo commands.in tem é simplesmente a sequência de comandos que serão executados nos roteadores:
oldpw
enable
oldpw
conf t
line vty 0 4
password newpw
exit
enable secret newpw
disable
exit
enable
oldpw
conf t
line vty 0 4
password newpw
exit
enable secret newpw
disable
exit
Backup das Configurações
O próximo script faz backup das configurações dos
roteadores. Assim como o script para troca de senha, ele precisa de um
arquivo como a lista dos dispositivos – no mesmo formato que o script
anterior. É necessário também que o TFTP server esteja ativo, para que
os arquivos sejam copiados.
#!/bin/bash
########################################################
# backupconfig.sh: faz backup das configurações dos equipamentos e grava
# nome de arquivo indicando equipamento e hora da gravacao
########################################################
# backupconfig.sh: faz backup das configurações dos equipamentos e grava
# nome de arquivo indicando equipamento e hora da gravacao
########################################################
# porta do telnet
porta=23
porta=23
cat devicelist | while read rtrname ipaddress
# armazena hora e data atual
time=`date +%d%m%y%H%M`
# armazena hora e data atual
time=`date +%d%m%y%H%M`
do
# sequência de comandos para login nos routers e execução do comando
#copy running-config tftp://tftpserver
comando="oldpw\nenable\noldpw\ncopy running tftp://10.1.2.1/$rtrname-$time.txt\n\n\nexit\nexit\n"
echo -e $comando | nc $ipaddress $porta
# sequência de comandos para login nos routers e execução do comando
#copy running-config tftp://tftpserver
comando="oldpw\nenable\noldpw\ncopy running tftp://10.1.2.1/$rtrname-$time.txt\n\n\nexit\nexit\n"
echo -e $comando | nc $ipaddress $porta
done
No script acima a configuração é copiada para o
servidor TFTP. O nome do arquivo gravado conterá o home do equipamento
(armazenado na variável $rtrname) e a data e a hora do backup
(armazenados na variável time).
Coleta de informações
Algumas vezes é necessário capturar informações dos
equipamentos para análise, como por exemplo os logs dos routers, ou
informações sobre utilização dos links e CPU. Utilizo este script para
capturar essas informações e gravar em um arquivo que pode,
posteriormente, ser analizado utilizando outros utilitários de shell.
#!/bin/bash
########################################################
# netshow.sh: grava configuracao, logging e show verion em um arquivo
#
########################################################
# netshow.sh: grava configuracao, logging e show verion em um arquivo
#
########################################################
# porta do telnet
porta=23
porta=23
# percorre o arquivo devicelist e lê o nome do equipamento e seu
# endereço IP
cat devicelist | while read rtrname ipaddress
do
# sequência de comandos para login nos routers e execução dos comandos # show running-config, show version e show logging
comando="oldpw\nenable\noldpw\nterm len 0\n show running-config\nshow version\nshow logging\nexit\nexit\n"
# executa o comando e grava em um arquivo com o nome do dispositivo
echo -e $comando | nc $ipaddress $porta > /var/rtr/$rtrname-coleta.txt
# endereço IP
cat devicelist | while read rtrname ipaddress
do
# sequência de comandos para login nos routers e execução dos comandos # show running-config, show version e show logging
comando="oldpw\nenable\noldpw\nterm len 0\n show running-config\nshow version\nshow logging\nexit\nexit\n"
# executa o comando e grava em um arquivo com o nome do dispositivo
echo -e $comando | nc $ipaddress $porta > /var/rtr/$rtrname-coleta.txt
done
Como todos os outros scripts, este usa um arquivo com
a lista de equipamentos no mesmo formato do script para alteração de
senhas.
Inventário de Equipamentos
Este último script é um pouco mais complexo. Ele coleta as informações do comando show version e
filtra as informações de modelo, memória e versão de software e grava
dentro de uma arquivo .csv, para posterior análise no Excel.
#!/bin/bash
########################################################
# inventario.sh: conecta aos routers e grava em um arquivo as informacoes
# de CPU, memoria e software dos equipamentos
########################################################
# inventario.sh: conecta aos routers e grava em um arquivo as informacoes
# de CPU, memoria e software dos equipamentos
########################################################
# porta do telnet
porta=23
porta=23
# percorre o arquivo devicelist e lê o nome do equipamento e seu endereço IP
cat devicelist | while read rtrname ipaddress
do
tempfile="/tmp/~$rtrname.tmp"
# sequência de comandos para login e execução do comando show version
comando="oldpw\nenable\noldpw\nshow version\nexit\nexit"
# executa os comandos e grava em um arquivo temporário
echo -e $comando | nc $ipaddress $porta > $tempfile
# extrai dados de memoria, modelo e versão de software do router.
memoria=`cat $tempfile | grep "bytes of memory." | awk ‘{print $8}’`
modelo=`cat $tempfile | grep "bytes of memory." | awk ‘{print $2}’`
imagem=`cat $tempfile | grep "^System image" | awk ‘{print $5}’`
# grava as informações num arquivo .csv, para ser importado no Excel
echo $modelo,$memoria,$imagem >> inventario.csv
# remove o arquivo temporário
rm $tempfile
done
do
tempfile="/tmp/~$rtrname.tmp"
# sequência de comandos para login e execução do comando show version
comando="oldpw\nenable\noldpw\nshow version\nexit\nexit"
# executa os comandos e grava em um arquivo temporário
echo -e $comando | nc $ipaddress $porta > $tempfile
# extrai dados de memoria, modelo e versão de software do router.
memoria=`cat $tempfile | grep "bytes of memory." | awk ‘{print $8}’`
modelo=`cat $tempfile | grep "bytes of memory." | awk ‘{print $2}’`
imagem=`cat $tempfile | grep "^System image" | awk ‘{print $5}’`
# grava as informações num arquivo .csv, para ser importado no Excel
echo $modelo,$memoria,$imagem >> inventario.csv
# remove o arquivo temporário
rm $tempfile
done
O script armazena em variáveis as informações
desejadas sobre os equipamentos. Notem que a filtragem é feita
procurando-se strings específicas na saída do comando show version.
Essas strings são comuns a vários equipamentos Cisco. Eu as utilizo
para inventário de roteadores, switches e access-points. As informações
são gravadas no arquivo inventario.csv para que eu possa abri-lo no
Excel e editar as informações. Por último, pode-se observar ainda que o
comando show version é gravado num arquivo temporário, que depois será removido.
Os scripts analisados neste artigo são bastante
simples. Eles foram criados para atender a necessidades específicas
minhas ou de clientes. Você pode usá-los como base para desenvolver
scripts que atendam as suas próprias necessidades. Pode também
incrementá-los para resolver tarefas mais complexas. Sua criatividade e
conhecimento de shell scripts é o limite. Espero com esse artigo ter
contribuído para a diminuição do tempo gasto gerenciando
Nenhum comentário:
Postar um comentário