{"id":1236,"date":"2017-02-03T18:08:37","date_gmt":"2017-02-03T21:08:37","guid":{"rendered":"http:\/\/mushroomlabs.com.br\/blog\/?p=1236"},"modified":"2022-02-13T18:34:06","modified_gmt":"2022-02-13T21:34:06","slug":"fazendo-backups-de-devices-por-ssh-com-script-em-expect-e-bash","status":"publish","type":"post","link":"https:\/\/mushroomlabs.com.br\/blog\/2017\/02\/03\/fazendo-backups-de-devices-por-ssh-com-script-em-expect-e-bash\/","title":{"rendered":"Fazendo backups de devices por SSH com script em expect e bash"},"content":{"rendered":"<p><img loading=\"lazy\" decoding=\"async\" class=\"wp-image-1237 aligncenter\" src=\"https:\/\/mushroomlabs.com.br\/blog\/wp-content\/uploads\/2017\/02\/expect-300x201.jpg\" alt=\"\" width=\"657\" height=\"440\" srcset=\"https:\/\/mushroomlabs.com.br\/blog\/wp-content\/uploads\/2017\/02\/expect-300x201.jpg 300w, https:\/\/mushroomlabs.com.br\/blog\/wp-content\/uploads\/2017\/02\/expect-768x514.jpg 768w, https:\/\/mushroomlabs.com.br\/blog\/wp-content\/uploads\/2017\/02\/expect.jpg 870w\" sizes=\"auto, (max-width: 657px) 100vw, 657px\" \/><\/p>\n<p>Automatizar processos \u00e9 sempre importante. N\u00e3o h\u00e1 cabimento que em pleno 2017 pessoas fa\u00e7am processos de backup em empresas de maneira manual (ou pior, que nem exista backup, trabalhando na sorte).<\/p>\n<p>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\u00f3pia e seguran\u00e7a. Diferente de equipamentos que tem s\u00f3 configura\u00e7\u00e3o em texto plano, como Cisco, Alcatel-Lucent, Datacom por exemplo e que j\u00e1 possuem softwares que fazem essa fun\u00e7\u00e3o, no trabalho usamos o RANCID, d\u00ea uma procurada, temos onde trabalho, a solu\u00e7\u00e3o de wireless Aruba, que o backup \u00e9 um conjunto de arquivos compactados. Junto com a controller existe um software da pr\u00f3pria Aruba para gerenciamento das controladoras que faz backup, chamado AirWave. Mas para fazer backup ela precisa ter acesso a leitura e grava\u00e7\u00e3o e por motivos de seguran\u00e7a deixamos o software apenas com leitura, ele ficou exclusivamente para gr\u00e1ficos, relat\u00f3rios, rastreabilidade de dados, etc. Assim, ficamos sem ter uma solu\u00e7\u00e3o nativa para realizar backup das controllers. H\u00e1 quem contrate apenas a solu\u00e7\u00e3o de access points e controllers, assim este material ser\u00e1 bem \u00fatil.<\/p>\n<p>As pr\u00f3prias controllers, por SSH ou por browser, possui uma ferramenta manual de backup. Basicamente voc\u00ea loga por SSH e em modo enable voc\u00ea d\u00e1 o comando <span style=\"color: #ff0000;\"><em><strong>backup flash<\/strong><\/em><\/span> e \u00e9 gerado dentro da <strong>flash<\/strong> da controller o arquivo\u00a0<strong><em><span style=\"color: #ff0000;\">flashbackup.tar.gz<\/span><\/em>,\u00a0<\/strong>voc\u00ea 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\u00edveis 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\u00ea pode fazer para qualquer equipamento que tenha SSH e que voc\u00ea precise realizar um conjunto de comandos e extrair arquivos deste local.<\/p>\n<p>Pra ficar mais did\u00e1tico vou comentar apenas nos scripts, copie eles, salve e d\u00ea permiss\u00f5es de execu\u00e7\u00e3o com <em><strong><span style=\"color: #ff0000;\">chmod +x [nome_do_arquivo]<\/span><\/strong><\/em><\/p>\n<p>&nbsp;<\/p>\n<p>O script <em><strong><span style=\"color: #ff0000;\">CopiaController<\/span><\/strong><\/em><\/p>\n<pre style=\"padding-left: 30px;\">#!\/usr\/bin\/expect -f\r\n#Programa de backup da Controller Aruba - modulo copia controller - versao 0.1\r\n#Wagner Bonifacio Leite\r\n\r\n#variavel da controller 1\r\nset controller1 \"192.168.0.6\"\r\n\r\n#variavel da controller 2\r\nset controller2 \"192.168.0.7\"\r\n\r\n#variavel do servidor de destino do arquivo\r\nset server \"192.168.0.100\"\r\n\r\n#variavel de data\r\nset data [exec date +%d-%m-%y]\r\n\r\n#laco de repeticao para fazer uma controller por vez limitado a duas\r\nfor {set c 1} {$c &lt;= 2} {incr c 1} {\r\n\r\n#condicional para variavel controller -unica, para la\u00e7o de repeticao-\r\nif { $c == 1} {\r\n\r\n#se variavel verdadeira seta controller 1 como controller\r\nset controller [lindex $controller1 0]\r\n \r\n } else {\r\n\r\n#senao seta controller 2 como controller\r\nset controller [lindex $controller2 0]\r\n\r\n}\r\n\r\n#loga SSH na controller\r\nspawn ssh <span style=\"color: #ff0000;\">[usuario_da_controller]<\/span>@$controller\r\nsleep 2\r\n#envia a senha para logar na controller\r\nexpect {\r\n\"*word:\" {send \"<span style=\"color: #ff0000;\">[senha_da_controller]<\/span>\\r\"}\r\n}\r\nsleep 1\r\n#passa a controller para enable mode com o comando enable\r\nexpect {\r\n\"*&gt;\" {send \"en\\r\"}\r\n}\r\nsleep 1\r\n#senha de enable\r\nexpect {\r\n\"*word:\" {send \"enable\\r\"}\r\n}\r\nsleep 1\r\n#comando que gera o backup backup flash\r\nexpect {\r\n\"#\" {send \"backup flash\\r\"}\r\n}\r\nsleep 60 \r\n#envia backup por SCP\r\nexpect {\r\n\"#\" {send \"copy flash: flashbackup.tar.gz scp: $server <span style=\"color: #ff0000;\">[usuario_do_server]<\/span> flashbackup$c-$data.tar.gz\\r\"}\r\n}\r\nsleep 1\r\nexpect {\r\n\"*word:\" {send \"<span style=\"color: #ff0000;\">[senha_do_server]<\/span>\\r\"}\r\n}\r\nsleep 15\r\n#Deleta backup da controller\r\nexpect {\r\n\"#\" {send \"delete filename flashbackup.tar.gz\\r\"}\r\n}\r\nsleep 1\r\n#sai da controller\r\nexpect {\r\n\"*#\" {send \"exit\\r\"}\r\n}\r\nsleep 5\r\nexpect {\r\n\"*&gt;\" {send \"exit\\r\"; exp_continue}\r\n}\r\n}\r\n\r\n#roda o script auxiliar para mover da pasta padrao para uma propria para ter snapshots de backup\r\nexec \/backup\/BackupController\/CopiaArquivos.sh &gt;@stdout\r\n\r\n#cria o arquivo de log para confirmar que executou todos os scripts\r\nexec \/backup\/BackupController\/Logs.sh &gt;@stdout\r\n\r\n#encerra o script\r\nexpect eof\r\n\r\n<\/pre>\n<p>E os scrips auxiliares <em><strong><span style=\"color: #ff0000;\">CopiaArquivos.sh<\/span><\/strong><\/em> e <span style=\"color: #ff0000;\"><em><strong>Logs.sh<\/strong><\/em><\/span><\/p>\n<p><em><strong><span style=\"color: #ff0000;\">CopiaArquivos.sh<\/span><\/strong><\/em><\/p>\n<p>(lembro que o caminho\u00a0\/backup\/BackupController\/Controller\/ foi criado por mim para a organiza\u00e7\u00e3o dos arquivos, fa\u00e7a a sua escolha)<\/p>\n<pre style=\"padding-left: 30px;\">#!\/bin\/sh\r\n#Programa de backup da Controller Aruba - modulo copia de arquivos - versao 0.2\r\n#Wagner Bonifacio Leite\r\n\r\n#variavel de data\r\ndata=$(date +\"%d-%m-%y\")\r\n\r\n#laco de repeticao para fazer a copia um arquivo por vez limitado a dois\r\nfor c in 1 2\r\n\r\ndo\r\n \r\n #comando de copia do arquivo da origem padrao do scp para a pasta destino\r\n cp \/home\/<span style=\"color: #ff0000;\">[usuario_do_server]<span style=\"color: #000000;\">\/<\/span><\/span>flashbackup$c-$data.tar.gz \/backup\/BackupController\/Controller\/\r\n echo \"arquivo flashbackup$c-$data.tar.gz copiado para a pasta \/backup\/BackupController\/Controller\/\"\r\n\r\nsleep 3\r\n\r\n#comando de deletar arquivo na origem\r\nrm -Rf \/home\/<span style=\"color: #ff0000;\">[usuario_do_server]<\/span>\/flashbackup$c-$data.tar.gz\r\necho \"arquivo flashbackup$c-$data.tar.gz apagado na origem\"\r\n\r\ndone<\/pre>\n<p><em><strong><span style=\"color: #ff0000;\">Logs.sh<\/span><\/strong><\/em><\/p>\n<pre style=\"padding-left: 30px;\">#!\/bin\/sh\r\n#Programa de backup da Controller Aruba - modulo log - versao 0.1\r\n#Wagner Bonifacio Leite\r\n\r\n#variavel de data\r\ndata1=$(date +\"%d-%m-%y\")\r\n\r\n#grava em arquivo os dados\r\necho \"BACKUP REALIZADO\" &gt;&gt; logs\/CONTROLLER-$data1.log\r\necho \"DATA - $data1\" &gt;&gt; logs\/CONTROLLER-$data1.log<\/pre>\n<p>E para finalizar a configura\u00e7\u00e3o de crontab<\/p>\n<p>No Linux d\u00ea o comando <em><strong><span style=\"color: #ff0000;\">crontab -e<\/span><\/strong><\/em><\/p>\n<p>Adicione a linha aonde est\u00e1 o script principal, colocarei o que fiz, altere conforme seu uso<\/p>\n<pre style=\"padding-left: 30px;\">00 23 * * * exec \/backup\/BackupController\/CopiaController &gt;&gt; \/backup\/BackupController\/logs\/log.txt<\/pre>\n<p>Para verificar se est\u00e1 correto a linha no seu cron, d\u00ea o comando <em><strong><span style=\"color: #ff0000;\">crontab -l<\/span><\/strong><\/em>.<\/p>\n<p>No meu caso faz backup todo dia as 23h00, modifique conforme suas necessidades.<\/p>\n<p>Bom, os scripts s\u00e3o esses, espero que quem gerencia controllers Aruba tire proveito e quem precisa de um script para acesso a SSH tamb\u00e9m tire proveito. At\u00e9 mais.<\/p>\n<p>&nbsp;<\/p>\n<p>&nbsp;<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Automatizar processos \u00e9 sempre importante. N\u00e3o h\u00e1 cabimento que em pleno 2017 pessoas fa\u00e7am 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 [&hellip;]<\/p>\n","protected":false},"author":2,"featured_media":0,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"site-sidebar-layout":"default","site-content-layout":"","ast-site-content-layout":"default","site-content-style":"default","site-sidebar-style":"default","ast-global-header-display":"","ast-banner-title-visibility":"","ast-main-header-display":"","ast-hfb-above-header-display":"","ast-hfb-below-header-display":"","ast-hfb-mobile-header-display":"","site-post-title":"","ast-breadcrumbs-content":"","ast-featured-img":"","footer-sml-layout":"","ast-disable-related-posts":"","theme-transparent-header-meta":"","adv-header-id-meta":"","stick-header-meta":"","header-above-stick-meta":"","header-main-stick-meta":"","header-below-stick-meta":"","astra-migrate-meta-layouts":"default","ast-page-background-enabled":"default","ast-page-background-meta":{"desktop":{"background-color":"var(--ast-global-color-5)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"tablet":{"background-color":"","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"mobile":{"background-color":"","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""}},"ast-content-background-meta":{"desktop":{"background-color":"var(--ast-global-color-4)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"tablet":{"background-color":"var(--ast-global-color-4)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"mobile":{"background-color":"var(--ast-global-color-4)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""}},"footnotes":""},"categories":[16,18,23,27,29],"tags":[131,132,130,128,129,133],"class_list":["post-1236","post","type-post","status-publish","format-standard","hentry","category-infraestrutura","category-network","category-produtividade","category-tutoriais","category-wireless","tag-aruba-networks","tag-controller","tag-devices","tag-expect","tag-ssh","tag-wireless"],"_links":{"self":[{"href":"https:\/\/mushroomlabs.com.br\/blog\/wp-json\/wp\/v2\/posts\/1236","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/mushroomlabs.com.br\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/mushroomlabs.com.br\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/mushroomlabs.com.br\/blog\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/mushroomlabs.com.br\/blog\/wp-json\/wp\/v2\/comments?post=1236"}],"version-history":[{"count":5,"href":"https:\/\/mushroomlabs.com.br\/blog\/wp-json\/wp\/v2\/posts\/1236\/revisions"}],"predecessor-version":[{"id":1242,"href":"https:\/\/mushroomlabs.com.br\/blog\/wp-json\/wp\/v2\/posts\/1236\/revisions\/1242"}],"wp:attachment":[{"href":"https:\/\/mushroomlabs.com.br\/blog\/wp-json\/wp\/v2\/media?parent=1236"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/mushroomlabs.com.br\/blog\/wp-json\/wp\/v2\/categories?post=1236"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/mushroomlabs.com.br\/blog\/wp-json\/wp\/v2\/tags?post=1236"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}