Automatizar processos é sempre importante. Não há cabimento que em pleno 2017 pessoas façam processos de backup em empresas de maneira manual (ou pior, que nem exista backup, trabalhando na sorte).
Este post surgiu da necessidade em meu trabalho de rodar comandos de backup em um appliance e copiar esse arquivo de backup gerado para um lugar seguro, que tenha a cópia e segurança. Diferente de equipamentos que tem só configuração em texto plano, como Cisco, Alcatel-Lucent, Datacom por exemplo e que já possuem softwares que fazem essa função, no trabalho usamos o RANCID, dê uma procurada, temos onde trabalho, a solução de wireless Aruba, que o backup é um conjunto de arquivos compactados. Junto com a controller existe um software da própria Aruba para gerenciamento das controladoras que faz backup, chamado AirWave. Mas para fazer backup ela precisa ter acesso a leitura e gravação e por motivos de segurança deixamos o software apenas com leitura, ele ficou exclusivamente para gráficos, relatórios, rastreabilidade de dados, etc. Assim, ficamos sem ter uma solução nativa para realizar backup das controllers. Há quem contrate apenas a solução de access points e controllers, assim este material será bem útil.
As próprias controllers, por SSH ou por browser, possui uma ferramenta manual de backup. Basicamente você loga por SSH e em modo enable você dá o comando backup flash e é gerado dentro da flash da controller o arquivo flashbackup.tar.gz, você copia o arquivo por scp para um servidor e tem o backup. Qual o problema? ter que fazer isso manualmente, sempre. Assim, procurando uma forma de fazer de forma automatizada e com base em scripts disponíveis que eu adaptei para funcionar corretamente e melhorei para as minhas necessidades nasceram esses scripsts. Deixo claro que fiz para as controllers Aruba, mas você pode fazer para qualquer equipamento que tenha SSH e que você precise realizar um conjunto de comandos e extrair arquivos deste local.
Pra ficar mais didático vou comentar apenas nos scripts, copie eles, salve e dê permissões de execução com chmod +x [nome_do_arquivo]
O script CopiaController
#!/usr/bin/expect -f #Programa de backup da Controller Aruba - modulo copia controller - versao 0.1 #Wagner Bonifacio Leite #variavel da controller 1 set controller1 "192.168.0.6" #variavel da controller 2 set controller2 "192.168.0.7" #variavel do servidor de destino do arquivo set server "192.168.0.100" #variavel de data set data [exec date +%d-%m-%y] #laco de repeticao para fazer uma controller por vez limitado a duas for {set c 1} {$c <= 2} {incr c 1} { #condicional para variavel controller -unica, para laço de repeticao- if { $c == 1} { #se variavel verdadeira seta controller 1 como controller set controller [lindex $controller1 0] } else { #senao seta controller 2 como controller set controller [lindex $controller2 0] } #loga SSH na controller spawn ssh [usuario_da_controller]@$controller sleep 2 #envia a senha para logar na controller expect { "*word:" {send "[senha_da_controller]\r"} } sleep 1 #passa a controller para enable mode com o comando enable expect { "*>" {send "en\r"} } sleep 1 #senha de enable expect { "*word:" {send "enable\r"} } sleep 1 #comando que gera o backup backup flash expect { "#" {send "backup flash\r"} } sleep 60 #envia backup por SCP expect { "#" {send "copy flash: flashbackup.tar.gz scp: $server [usuario_do_server] flashbackup$c-$data.tar.gz\r"} } sleep 1 expect { "*word:" {send "[senha_do_server]\r"} } sleep 15 #Deleta backup da controller expect { "#" {send "delete filename flashbackup.tar.gz\r"} } sleep 1 #sai da controller expect { "*#" {send "exit\r"} } sleep 5 expect { "*>" {send "exit\r"; exp_continue} } } #roda o script auxiliar para mover da pasta padrao para uma propria para ter snapshots de backup exec /backup/BackupController/CopiaArquivos.sh >@stdout #cria o arquivo de log para confirmar que executou todos os scripts exec /backup/BackupController/Logs.sh >@stdout #encerra o script expect eof
E os scrips auxiliares CopiaArquivos.sh e Logs.sh
CopiaArquivos.sh
(lembro que o caminho /backup/BackupController/Controller/ foi criado por mim para a organização dos arquivos, faça a sua escolha)
#!/bin/sh #Programa de backup da Controller Aruba - modulo copia de arquivos - versao 0.2 #Wagner Bonifacio Leite #variavel de data data=$(date +"%d-%m-%y") #laco de repeticao para fazer a copia um arquivo por vez limitado a dois for c in 1 2 do #comando de copia do arquivo da origem padrao do scp para a pasta destino cp /home/[usuario_do_server]/flashbackup$c-$data.tar.gz /backup/BackupController/Controller/ echo "arquivo flashbackup$c-$data.tar.gz copiado para a pasta /backup/BackupController/Controller/" sleep 3 #comando de deletar arquivo na origem rm -Rf /home/[usuario_do_server]/flashbackup$c-$data.tar.gz echo "arquivo flashbackup$c-$data.tar.gz apagado na origem" done
Logs.sh
#!/bin/sh #Programa de backup da Controller Aruba - modulo log - versao 0.1 #Wagner Bonifacio Leite #variavel de data data1=$(date +"%d-%m-%y") #grava em arquivo os dados echo "BACKUP REALIZADO" >> logs/CONTROLLER-$data1.log echo "DATA - $data1" >> logs/CONTROLLER-$data1.log
E para finalizar a configuração de crontab
No Linux dê o comando crontab -e
Adicione a linha aonde está o script principal, colocarei o que fiz, altere conforme seu uso
00 23 * * * exec /backup/BackupController/CopiaController >> /backup/BackupController/logs/log.txt
Para verificar se está correto a linha no seu cron, dê o comando crontab -l.
No meu caso faz backup todo dia as 23h00, modifique conforme suas necessidades.
Bom, os scripts são esses, espero que quem gerencia controllers Aruba tire proveito e quem precisa de um script para acesso a SSH também tire proveito. Até mais.