Script para auto-arquivamento das configurações de elementos de rede
Postado por: Marco Filippetti em Curiosidades, Tutoriais, Artigos -
Imprima este post
Certo dia, no trabalho, estava pesquisando no Google por um script que automatizasse a tarefa de extrair as configurações dos elementos de rede de tempos em tempos e as armazenasse em um servidor para consultas futuras. Depois de entrar em alguns sites, acabei encontrando exatamente o que eu procurava no site LinuxQuestions.org. Testei o script em nossa rede e funcionou perfeitamente. Compartilho aqui, com vocês, o dito-cujo:
#!/bin/bash
+++++++++++++++++++++++++++++
# Name: cisco_tftp_backup
# Author: Steve Cowles
#
# Revision: Created 10/1/2005 SWC
# Revision: 03/26/06 - SWC
# Added capability to save config data by date.
#
# Description: Shell Script to backup cisco startup-config files
# using tftp and store in pre-defined directory structure
#
# Directory structure for script is:
# base_dir /backup/cisco/{date}
# device type /router
# hostname /r1
# filename startup-config
# hostname /r2
# filename startup-config
# device type /switch
# hostname /s1
# filename startup-config
# hostname /s2
# filename startup-config
#
# 10.1.100.201 is the IP address of the system running this script
# nvram:startup-config is the only file allowed to be copied
+++++++++++++++++++++++++++++
+++++++++++++++++++++++++++++
# Error handlers
error_no_tftp_exec ()
{
echo "ERROR - Filename '$1' does not exist"
exit
}
error_no_backup ()
{
echo "ERROR - Unable to backup Host '$1'"
}
error_zero_length ()
{
echo "ERROR - Hostname '$1' backup has a zero size"
}
+++++++++++++++++++++++++++++
# If tftp executable does not exist... then exit
CMD=tftp ; TFTP=`which ${CMD} 2>/dev/null`
[ ! -x "${TFTP}" ] && error_no_tftp_exec ${CMD}
+++++++++++++++++++++++++++++
# Variable Section, edit below to meet requirements
+++++++++++++++++++++++++++++
# Define/load a variable to store the device information
# of all routers/switches to backup using tftp.
#
# Values are separated by colons (:)
# Value 1 = Device Type (sub-dir created)
# Value 2 = Device Hostname (sub-dir created)
# Value 3 = Device IP address
DEVICES=”
router:allar1:10.100.12.1
switch:allsw1:10.100.12.2
router:lewar1:10.100.16.1
switch:lewsw1:10.100.16.2
“
# Should an error occur during execution, e-mail
# errors to following person. i.e. If run as cronjob
MAILTO=”scowles@infohiiway.com”
# Define the base directory where you want to store
# files retreived from all devices. All subordinate
# directories will created relative to this base
BASELOG=/var/log/cisco_configs
BASEDIR=${BASELOG}/`date +%m.%d.%y`
# Define the filename to (get) from device using tftp
# See note 1 above
FILENAME=startup-config
+++++++++++++++++++++++++++++
# END Variable Section, No servicable parts below
+++++++++++++++++++++++++++++
+++++++++++++++++++++++++++++
# Begin Executable Section (do NOT edit below)
+++++++++++++++++++++++++++++
# If base directory does not exist, create it
[ ! -d ${BASEDIR} ] && mkdir ${BASEDIR}
# Update the symbolic link to point to the current
# BASEDIR directory
if [ -d ${BASELOG} ] ; then
# Router link
rm ${BASELOG}/router
ln -s ${BASEDIR}/router ${BASELOG}/router
# Switch link
rm ${BASELOG}/switch
ln -s ${BASEDIR}/switch ${BASELOG}/switch
fi
+++++++++++++++++++++++++++++
# Setup loop for each device listed in $DEVICES variable
+++++++++++++++++++++++++++++
for device in $DEVICES ; do
# Separate DEVICE TYPE/HOSTNAME/IP into separate varaibles
DEVICE=`echo ${device} | cut -d ‘:’ -f 1`
HOSTNAME=`echo ${device} | cut -d ‘:’ -f 2`
IP=`echo ${device} | cut -d ‘:’ -f 3`
# Set and Create the sub-directories to store files
SUBDIR=${BASEDIR}/${DEVICE}
[ ! -d ${SUBDIR} ] && mkdir ${SUBDIR}
[ ! -d ${SUBDIR}/${HOSTNAME} ] && mkdir ${SUBDIR}/${HOSTNAME}
# Set the fullpath to store file retreived during tftp
FULLPATH=${SUBDIR}/${HOSTNAME}/${FILENAME}
# tftp $FILENAME from device/IP to directory/FULLPATH
${TFTP} $IP -c get ${FILENAME} ${FULLPATH} >/dev/null 2>&1 ||
error_no_backup ${HOSTNAME}
# Since tftp return values don’t seem to include zero length
# gets, test for this condition
[ ! -s ${FULLPATH} ] && error_zero_length ${HOSTNAME}
done
Destaquei em amarelo onde a lista com os elementos e seus IPs deve ser incluída.
PS: Não se esqueça que é preciso liberar, nos elementos de rede Cisco, o acesso do servidor de backup. Isso pode ser feito via exemplo abaixo:
access-list 55 remark PERMIT hosts requesting TFTP access access-list 55 permit host 10.1.100.201 tftp-server nvram:startup-config 55
Onde 10.1.100.201 é o endereço IP do servidor. No exemplo, o script vai buscar a startup-config. Mas ele pode ser facilmente alterado para buscar a running-config ou outro arquivo.
Abaixo, um exemplo do que ele faz, usando o nosso servidor de teste:
[marcoaf@server tftp]$ ls 08.17.10 08.21.10 08.25.10 08.29.10 09.02.10 09.06.10 08.18.10 08.22.10 08.26.10 08.30.10 09.03.10 09.07.10 08.19.10 08.23.10 08.27.10 08.31.10 09.04.10 09.08.10 08.20.10 08.24.10 08.28.10 09.01.10 09.05.10 [marcoaf@server tftp]$ cd 09.05.10/ [marcoaf@server 09.05.10]$ ls acs firewall router switch [marcoaf@server 09.05.10]$ cd router/ [marcoaf@server router]$ ls ROTEADOR01 ROTEADOR02 ROTEADOR03 ROTEADOR04 [marcoaf@server router]$ cd ROTEADOR02 [marcoaf@server ROTEADOR02]$ ls running-config
Tudo organizado por data e tipo de elemento. Para que o script funcione, você deve torná-lo executável no Linux e incluí-lo no CRONTAB para rodar no intervalo que você quiser.
Popularity: 3% [?]
Leia também:
- Script para automatizar comandos em switches Cisco…
- Configuração de VLANs e VTP SEM usar o VLAN Database mode, no Dynamips
- 3 - Perguntas Básicas, Respostas Básicas - GERENCIAMENTO DE REDE
- Gerenciamento de Rede Fora de Banda (OOB - Out-Of-Band)
- Comprimindo o startup-config
- Usando um analisador de pacote para troubleshooting de rede - parte III
- Auto-Segurança em roteadores Cisco
- Qual o melhor simulador de redes para estudo do CCNA?
- Usando um analisador de pacote para troubleshooting de rede - parte I
- Usando um analisador de pacote para troubleshooting de rede - parte II
- Questão CCNA - Access-List
- Oito Dicas para Design e Troubleshooting de LANs
- Lista de Controle de Acesso criadas facilmente - Parte 6
- Níveis de privilégio no IOS Cisco
- “Testes de Mesa” aplicados a Redes
8 de September de 2010 às 12:33 pm
Marco,
Muito interessante esse scritp, assim que montar um lab vou testa-lo.
Tenho 2 scrips que nunca utilizei, um colega que me passou e disse que funcionava… rsss, que parece ser interessante tbem. Segue abaixo os scripts:
Primeiro
#!/bin/bash
########################################################
# inventario.sh: conecta aos routers e grava em um arquivo as informacoes
# de CPU, memoria e software dos equipamentos
########################################################
# Caminho para o diretório cisco_adm:
ciscopath=$HOME/cisco-adm
# Data:
tempo=`date +%y%m%d%H%M`
# porta do telnet
porta=23
# percorre o arquivo devicelist e lê o nome do equipamento e seu endereço IP
cat $ciscopath/bd/lista_de_dispositivos | while read rtrname ipaddress pw
do
tempfile=”/tmp/~$rtrname.tmp”
# sequência de comandos para login e execução do comando show version
comando=”$pw\nenable\n$pw\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 >> $ciscopath/inventarios/inventario_$rtrname–$tempo.csv
# remove o arquivo temporário
rm $tempfile
done
Segundo
#!/bin/bash
########################################################
# netshow.sh: grava configuracao, logging e show verion em um arquivo
#
########################################################
# Caminho para o diretório cisco_adm:
ciscopath=$HOME/cisco-adm
# Data:
tempo=`date +%y%m%d%H%M`
# porta do telnet
porta=23
# percorre o arquivo devicelist e lê o nome do equipamento e seu
# endereço IP
cat $ciscopath/bd/lista_de_dispositivos | while read rtrname ipaddress pw
do
# sequência de comandos para login nos routers e execução dos comandos # show running-config, show version e show logging
comando=”$pw\nenable\n$pw\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 > $ciscopath/coletas/$rtrname–$tempo–coleta.txt
done
Se vc puder testar e avaliar! E ver se realmente funciona… rsss
Esses tempos estava lendo sobre subversion, achei interessante para criar um servidor de configurações, alterações etc. Pena que ele é mais utilizado na área de desenvolvimento.
Abraços
8 de September de 2010 às 1:04 pm
LYON,
É possivel utilizar SSH para acessar os equipamentos de rede nesse Script ???
Isso seria bem interessante tb.
8 de September de 2010 às 1:11 pm
Ai sim, fomos surpreendidos novamente!
8 de September de 2010 às 3:41 pm
santos_ligeiro, não sei se funciona via ssh. Se conseguir um tempo quero montar um pegueno lab e testar. E talvez até dar uma melhorada no script.
8 de September de 2010 às 4:25 pm
Eu estava com ideia de usar o RANCID pra fazer backup das minhas configuraçoes…a vantagem do rancid que ele ja faz um “diff” da configuracao atual com a ultima configuraçao salva e de manda as mudanças por email….
Mas esse script é bem mais facil neh?!…rsrsrsrs
8 de September de 2010 às 4:28 pm
Douglas, hoje trocamos o script pelo RANCID. É bem melhor. Mas o script é simples, como vc mesmo disse
8 de September de 2010 às 4:46 pm
Opa!…rsrsrs….é o RANCID me pareceu ser bem bacana…mas nao tive tempo de instala-lo ainda…
quando sai um post sobre ele?….rsrsrsrs
10 de September de 2010 às 11:38 am
Existe um outro programa que executa comandos no shell linux e espera pela resposta no terminal. De acordo com o que “aparecia” no terminal, ele dá continuidade no script. Eu utilizava uns anos atrás para fazer scripts de backup, mas não me recordo o nome. Se alguém sabe o nome deste software, por favor me informe.
10 de September de 2010 às 11:59 am
Achei, tava me referindo ao “expect”. Inclusive tem um post sobre ele aqui no blog: http://blog.ccna.com.br/2009/10/24/script-para-automatizar-comandos-em-switches-cisco/
15 de September de 2010 às 6:00 pm
Lyon, esse script que vc mencionou funciona sim, eu utilizo um parecido todos os dias para guardar as minhas configurações. Eu utilizo um programa chamado Cygwin, para rodar isso.
Abraços
20 de September de 2010 às 1:29 pm
Thiago, bom saber que funciona.
24 de September de 2010 às 7:20 am
Amigos,
Não sendo propriamente um programa/script para backup de equipamentos de rede, é algo que nos permite automatizar o processo.
Chama-se Telnet Scripting Tool e podem encontrá-lo aqui http://support.moonpoint.com/downloads/windows/network/Telnet/tst10.php.
No seguinte artigo podem ver uma breve explicação do funcionamento deste utilitário: http://jerrymannel.com/blog/2008/11/11/telnet-scripting-tool-aka-tst10exe/
Apenas funciona em Windows e suporta Telnet.
Muito bom pata automatizar tarefas que possam ser executadas via Telnet.
Abraço Lusitano
12 de November de 2010 às 11:31 am
Muito bom o script. Simples e funcional.
Só queria deixar uma dificuldade que tive ao executar este script no linux Debian:
Quando estava executando estava travando..não fazia nada.
Verifiquei rodando o comando na mão: /usr/bin/tftp 10.10.10.1 -c get startup-config
Me aparece a mensage:
usage: tftp host-name [port]
tftp> ?
Então verifiquei que estava usando o pacote tftp-client no meu linux. Após pesquisar, vi que tem que usar o pacote tftp-hpa
Sendo assim executei o comando: apt-get install tftp-hpa
Então o próprio sistema substituiu o tftp-client por tftp-hpa. E assim o scritp rodou perfeitamente! =)
Abraços!