Criando backups de forma simples e enviando para o Telegram ou servidor via SSH
Vamos aprender a criar scripts simples para fazer backups que podem ser úteis no nosso dia dia, vamos enviar eles para um servidor ou no telegram que aceita arquivos de até 2Gb #chupawhatsapp
Criando Bot no telegram
Abra o Telegram e procure por @BotFather.
Inicie a conversa com ele.
– Digite o comando /newbot para iniciar a criação de um novo bot.
– Após o comando você vai dar um nome para seu bot. Ex.: “Bot Legal RR”.
– Em seguida é necessário digitar o nome de usuário para o bot, sendo obrigatório terminar com bot. Ex.: “legallrr_bot”.
– Ao finalizar você receber informações com seu TOKEN, que vamos utilizar em seguida.
Neste exemplo nosso token para acessar a API HTTP ficou:
757396508:AAHpaoyVN-95maOCax1vDPDQBnSaZd9P5r0
Procure pelo seu bot e comece uma conversa com ele e envie uma mensagem de teste para o mesmo, pois vamos precisar descobrir o ID do seu usuário, para que ele possa lhe enviar as mensagens.
Abra em seu seu navegador a seguinte URL https://api.telegram.org/botTOKEN/getUpdates para descobrir o ID do usuário que enviou a mensagem ou de um grupo.
Ex.: https://api.telegram.org/bot757396508:AAHpaoyVN-95maOCax1vDPDQBnSaZd9P5r0/getUpdates
:: Chat privado ::
{"ok":true,"result":[{ "update_id":649208620,"message":{ "message_id":2,"from":{"id":221122111,"is_bot":false,"first_name":"Rudimar","last_name":"Remontti","username":"remontti","language_code":"pt-br"}, "chat":{"id":999999999,"first_name":"Rudimar","last_name":"Remontti","username":"remontti","type":"private"}, "date":1541210279,"text":"Testando" } }]}
ID do chat privado: 999999999
Se desejar criar um grupo também, basta adicionar seu bot a ele, após adiciona-lo envia uma mensagem como /teste para que possamos coletar o ID do grupo.
:: Chat em Grupo ::
{"ok":true,"result":[{ "update_id":649208622,"message":{"message_id":4,"from":{ "id":221122111,"is_bot":false,"first_name":"Rudimar","last_name":"Remontti","username":"remontti","language_code":"pt-br"}, "chat":{"id":-1000000000000,"title":"Grupo Legal","type":"group","all_members_are_administrators":true },"date":1541210975,"text":"/teste","entities":[{"offset":0,"length":6,"type":"bot_command"} }]}
ID do chat grupo: -1000000000000
Agora que já temos o Token e o ID do chat/grupo vamos ao script de backup. Se ainda estiver com dificuldade no vídeo onde ensino integrar com o zabbix aos 52 min explico como criar o bot.
Não esqueça q para o bot enviar algo para você é necessários iniciar uma conversa com o mesmo.
Antes faça um teste abrindo no seu navegador https://api.telegram.org/botTOKEN/sendMessage?chat_id=ID&text=Mensagem ou diretamente pelo terminal com curl.
# apt install curl
Ex.: Enviando mensagem para um usuário
# curl --silent -X POST \ --data-urlencode "chat_id=8888888" \ --data-urlencode "text=Enviando para usuário" \ "https://api.telegram.org/bot757396508:AAHpaoyVN-95maOCax1vDPDQBnSaZd9P5r0/sendMessage"
Ex.: Enviando mensagem para um grupo (Não torne o grupo público para sua segurança)
# curl --silent -X POST \ --data-urlencode "chat_id=-1000000000000" \ --data-urlencode "text=Enviando para o Grupo" \ "https://api.telegram.org/bot757396508:AAHpaoyVN-95maOCax1vDPDQBnSaZd9P5r0/sendMessage"
Se as mensagens chegaram estamos preparados para fazer nossos backups com o telegram.
Scripts
Pacotes requeridos:
# apt install curl wget zip unzip
Para ficar algo organizado vou criar uma pasta onde colocarei todos os scripts
# mkdir /etc/backups/
Como normalmente eu uso o telegram mesmo que seja apenas para notificar que um backup foi feto, vou criar uma pasta chamada para fazer toda a configuração do bot nela, criei um novo script com base no código que utilizei no tutorial do Fastnetmon, assim toda vez que for chamar telegram para enviar mensagem ou arquivo basta executa-lo sem sofrimero e varias linhas. Bora prepara-ló!
Preparando o script do telegram (bot)
# wget https://raw.githubusercontent.com/remontti/telegramBotShell/master/telegram -O /bin/telegram # chmod +x /bin/telegram
Alterando o TOKEN:
# vim /bin/telegram
Altere o TOKEN e o formato da compactação (zip ou tar)
Altere o token:
TOKEN="000000000:0000000000000-0000000000000000000000000000000"
Escolha o metodo de compactação tar/zip
COMPAC='tar'
Como usar?
-m: Para enviar uma mensagem
# telegram -m "-ID Chat" "Mensagem linha 1" "Mensagem linha 2" "Mensagem linha 3" # telegram -m "ID Usuário" "Mensagem linha 1" "Mensagem linha 2" "Mensagem linha 3"
-f: Para enviar um arquivo
# telegram -f "-100000000" "/diretorio/arquivo" "nome do arquivo compactado" "Comentário" # telegram -f "12345689" "/var/log/syslog" "syslog" "Logs do sistema"
Faça seu testes! Vale lembrar que toda vez que o script do telegram envia um arquivo ele irá compactar e remover este arquivo do servidor após envio.
Preparando o script para envido do backup via SSH
# apt install sshpass # wget https://raw.githubusercontent.com/remontti/backupSSH/master/backup -O /bin/backup # chmod +x /bin/backup
Como usar?
Ex.:
# backup "nome para o arquivo" "diretório ou diretórios a salvar" "usuário ssh" "senha ssh" "IP Serv" "Porta ssh" "diretorio de destino" # backup "etc" "/etc/*" "jose" "123456" "192.168.0.200" "22" "/home/jose/backup"
Backups Telegram
♥ Backup de um diretório
Vamos imaginar que gostaríamos de salvar o diretório /etc/frr/*
# vim /etc/backups/backup_frr_telegram.sh
Adicionaremos apenas o ID usuário ou grupo (lembre-se que grupo sempre tem um “-” antes do ID) ex:
#!/bin/bash /bin/telegram -f "200000000" "/etc/frr/*" "frr" "Backup FRR"
De permissão para execução:
# chmod +x /etc/backups/backup_frr_telegram.sh
Basta rodar agora o script
# /etc/backups/backup_frr_telegram.sh
Já já vamos ver como adiciona-lo no CRON (Agenda) para tornar isso automático.
♥ Backup de múltiplos diretórios
Vamos imaginar que gostaríamos de salvar todos os diretórios do bind9, para isso basta adicionar todos os diretórios/arquivos entre aspas “/etc/bind/* /usr/share/dns/* /var/cache/bind/*”
# vim /etc/backups/backup_bind_telegram.sh
Altere o ID usuário/grupo (lembre-se que grupo sempre tem um “-” antes do ID) ex:
#!/bin/bash /bin/telegram -f "200000000" "/etc/bind/* /usr/share/dns/* /var/cache/bind/*" "ns1" "Backup Bind"
De permissão para execução:
# chmod +x /etc/backups/backup_bind_telegram.sh
Basta rodar agora o script
# /etc/backups/backup_bind_telegram.sh
♥ Backup de um banco de dados Mysql/MariaDB
Neste exemplo vamos fazer backup do banco de dados “radius”. Altere as variáveis informando usuário/senha do seu banco de dados bem como nome do banco e ID do telegram.
#!/bin/bash # Autor: remontti.com.br # -------------------------------------- # USUARIO DO BANCO DE DADOS USER_DB='root' # SENHA DO BANCO DE DADOS SENHA_DB='senha' # NOME DO BANCO DE DADOS NOME_BANCO='radius' # NOME PARA O BACKUP NOME_DO_BKP='Freeradius' # ID TELEGRAM ID_TELEGRAM='-123456789000' # -------------------------------------- DATABKP=`date +%Y-%m-%d` NOME_BD="/tmp/${NOME_BANCO}.${DATABKP}.tar.gz" mysqldump -h 127.0.0.1 -u ${USER_DB} -p${SENHA_DB} -B ${NOME_BANCO} > /tmp/${NOME_BANCO}.${DATABKP}.sql /bin/telegram -f "${ID_TELEGRAM}" "/tmp/${NOME_BANCO}.${DATABKP}.sql" "${NOME_DO_BKP}" "${NOME_BANCO}" &>/dev/null rm -f /tmp/*.sql &>/dev/null
♥ Backup de “todos” os banco de dados Mysql/MariaDB
Neste exemplo vamos fazer backup de “todos” os bancos de dados do servidor.
Perceba que o comando:
# ls -d /var/lib/mysql/*/ |cut -d / -f 5
Listará todas as bases, porém o com “grep -v” ignoro alguns bancos que não acho necessário.
# ls -d /var/lib/mysql/*/ |cut -d / -f 5 |grep -v mysql |grep -v performance_schema
Altere as variáveis informando usuário/senha do seu banco de dados bem como ID do telegram.
#!/bin/bash # Autor: remontti.com.br # -------------------------------------- # USUARIO DO BANCO DE DADOS USER_DB='root' # SENHA DO BANCO DE DADOS SENHA_DB='senha' # NOME PARA O BACKUP NOME_DO_BKP='ServidorWeb' # ID TELEGRAM ID_TELEGRAM='-123456789000' # -------------------------------------- for BANCO in `ls -d /var/lib/mysql/*/ |cut -d / -f 5 |grep -v mysql |grep -v performance_schema` do DATABKP=`date +%Y-%m-%d` NOME_BD="/tmp/${BANCO}.${DATABKP}.tar.gz" mysqldump -h 127.0.0.1 -u ${USER_DB} -p${SENHA_DB} -B ${BANCO} > /tmp/${BANCO}.${DATABKP}.sql done; /bin/telegram -f "${ID_TELEGRAM}" "/tmp/*.sql" "${NOME_DO_BKP}" "Backup BDs" rm -f /tmp/*.sql &>/dev/null
♥ Backup do Zabbix-Server (Apenas do que interessa)
Para o backup do zabbix utilizo um script do maxhq que faz um dump apenas da parte da base que nos interessa, isso significa que você não terá salvo o historio das “coisa”! Porém realizei um fork do projeto qual fiz alguns ajustes para dar suporte ao zabbix 5.
Vamos baixa-lo em nosso diretório:
# cd /etc/backups/ # wget https://raw.githubusercontent.com/remontti/zabbix-backup/master/zabbix-dump # chmod +x /etc/backups/zabbix-dump
Crie seu script
# vim /etc/backups/backup_zbx.sh
#!/bin/bash # ----Config ---- ID_TELEGRAM='-123456789000' # --------------- /etc/backups/zabbix-dump -o /tmp &>/dev/null /bin/telegram -f "${ID_TELEGRAM}" "/tmp/zabbix_cfg*.gz" "zabbix" "Backup Bind" rm -f /tmp/*.gz
Permissões:
# chmod +x /etc/backups/backup_zbx.sh
Execute:
# /etc/backups/backup_zbx.sh
Backups SSH
Neste caso tenho o um servidor que irá receber nossos backups, sendo:
IP: 172.16.0.100 Porta SSH: 60321 Usuários: jose Senha: 123456 Diretório onde ficará os backups: /home/jose/backup/
♥ Backup de um diretório
Vamos fazer o mesmo backup que fizemos anterior do “/etc/frr/*”.
# vim /etc/backups/backup_frr_ssh.sh
#!/bin/bash # /bin/backup "todo_etc" "/etc/*" "jose" "123456" "172.16.0.100" "60321" "/home/jose/backup"
Permissão:
# chmod +x /etc/backups/backup_frr_ssh.sh
Execute:
# /etc/backups/backup_frr_ssh.sh
♥ Backup de múltiplos diretórios
Ex backup DNS bind9
# vim /etc/backups/backup_bind_ssh.sh
#!/bin/bash # /bin/backup "ns1_dns" "/etc/bind/* /usr/share/dns/* /var/cache/bind/*" "jose" "123456" "172.16.0.100" "60321" "/home/jose/backup"
Permissão:
# chmod +x /etc/backups/backup_bind_ssh.sh
Execute:
# /etc/backups/backup_bind_ssh.sh
♥ Backup de um banco de dados Mysql/MariaDB
# vim /etc/backups/backup_bd_ssh.sh
#!/bin/bash # Autor: remontti.com.br # -------------------------------------- # USUARIO DO BANCO DE DADOS USER_DB='root' # SENHA DO BANCO DE DADOS SENHA_DB='senha' # NOME DO BANCO DE DADOS NOME_BANCO='radius' # NOME PARA O BACKUP NOME_DO_BKP='Freeradius' # ID TELEGRAM ID_TELEGRAM='-123456789000' #----Servidor que recebe o Backup ------ # Usuários SSH USER_SSH='jose' # Senha SSH PASS_SSH='senha' # Porta SSH PORT_SSH='22' # Diretório onde ira salvar DIR_SSH='/home/jose/backup' # IP do servidor IP_SSH='172.16.0.100' # -------------------------------------- DATABKP=`date +%Y-%m-%d` NOME_BD="/tmp/${NOME_BANCO}.${DATABKP}.tar.gz" mysqldump -h 127.0.0.1 -u ${USER_DB} -p${SENHA_DB} -B ${NOME_BANCO} > /tmp/${NOME_BANCO}.${DATABKP}.sql backup "${NOME_DO_BKP}" "/tmp/${NOME_BANCO}.${DATABKP}.sql" "${USER_SSH}" "${PASS_SSH}" "${IP_SSH}" "${PORT_SSH}" "${DIR_SSH}" rm -f /tmp/*.sql &>/dev/null
Permissão:
# chmod +x /etc/backups/backup_bd_ssh.sh
Execute:
# /etc/backups/backup_bd_ssh.sh
♥ Backup de “todos” os banco de dados Mysql/MariaDB
# vim /etc/backups/backup_bdall_ssh.sh
#!/bin/bash # Autor: remontti.com.br # -------------------------------------- # USUARIO DO BANCO DE DADOS USER_DB='root' # SENHA DO BANCO DE DADOS SENHA_DB='senha' # NOME PARA O BACKUP NOME_DO_BKP='ServidorWeb' # ID TELEGRAM ID_TELEGRAM='-123456789000' #----Servidor que recebe o Backup ------ # Usuários SSH USER_SSH='jose' # Senha SSH PASS_SSH='senha' # Porta SSH PORT_SSH='22' # Diretório onde ira salvar DIR_SSH='/home/jose/backup' # IP do servidor IP_SSH='172.16.0.100' # -------------------------------------- for BANCO in `ls -d /var/lib/mysql/*/ |cut -d / -f 5 |grep -v mysql |grep -v performance_schema` do DATABKP=`date +%Y-%m-%d` NOME_BD="/tmp/${BANCO}.${DATABKP}.tar.gz" mysqldump -h 127.0.0.1 -u ${USER_DB} -p${SENHA_DB} -B ${BANCO} > /tmp/${BANCO}.${DATABKP}.sql done; backup "${NOME_DO_BKP}" "/tmp/*.sql" "${USER_SSH}" "${PASS_SSH}" "${IP_SSH}" "${PORT_SSH}" "${DIR_SSH}" rm -f /tmp/*.sql &>/dev/null
Permissão:
# chmod +x /etc/backups/backup_bdall_ssh.sh
Execute:
# /etc/backups/backup_bdall_ssh.sh
♥ Backup do Zabbix-Server (Apenas do que interessa)
Para o backup do zabbix utilizo um script do maxhq que faz um dump apenas da parte da base que nos interessa, isso significa que você não terá salvo o historio das “coisa”! Porém realizei um fork do projeto qual fiz alguns ajustes para dar suporte ao zabbix 5.
Vamos baixa-lo em nosso diretório:
# cd /etc/backups/ # wget https://raw.githubusercontent.com/remontti/zabbix-backup/master/zabbix-dump chmod +x /etc/backups/zabbix-dump
Crie seu script
# vim /etc/backups/backup_zbx_ssh.sh
#!/bin/bash # Autor: remontti.com.br #----Servidor que recebe o Backup ------ # Usuários SSH USER_SSH='jose' # Senha SSH PASS_SSH='senha' # Porta SSH PORT_SSH='22' # Diretório onde ira salvar DIR_SSH='/home/jose/backup' # IP do servidor IP_SSH='172.16.0.100' # -------------------------------------- /etc/backups/zabbix-dump -o /tmp &>/dev/null backup "zabbix" "/tmp/zabbix_cfg*.gz" "${USER_SSH}" "${PASS_SSH}" "${IP_SSH}" "${PORT_SSH}" "${DIR_SSH}" rm -f /tmp/*.gz
Permissões:
# chmod +x /etc/backups/backup_zbx_ssh.sh
Execute:
# /etc/backups/backup_zbx_ssh.sh
Bom com base nesses scripts e um pouco de imaginação acredito que você vai conseguir fazer muita coisa, mas como automatizar? Veremos isso agora!
Agendando o backup (Cron)
Vamos agendar nosso(s) scripts para serem feitos em algumas situações:
Execute o comando crontab -e.
# crontab -e
A primeira vez que você rodar o comando será solicitado qual editor você deseja, vou selecionar o nano “1” (ou apenas de Enter) por ser o mais fácil. Vale a leitura também: Agendamento CRON / CRONTAB e CronHowto
Select an editor. To change later, run 'select-editor'. 1. /bin/nano <---- easiest 2. /usr/bin/vim.basic 3. /usr/bin/vim.tiny Choose 1-3 [1]: 1 [ENTER]
Você precisa entender a ordem dos valores interpretado pelo cron:
# m h dom mon dow command # * * * * * comando # | | | | | |_ _ _ _ Comando a ser executado # | | | | |_ _ _ _ _ _ _ Semana (0-7 - domingo à domingo) # | | | |_ _ _ _ _ _ _ _ _ Mês (01-12) # | | |_ _ _ _ _ _ _ _ _ _ _ Dia (01-31) # | |_ _ _ _ _ _ _ _ _ _ _ _ _Hora (00-23) # |_ _ _ _ _ _ _ _ _ _ _ _ _ _Minuto (00-59)
Alguns exemplos
Executar um backup todos os dias às 20h e 30min:
30 20 * * * /etc/backups/backup_script.sh
Todo dia primeiro do mês às 00h e 45min:
45 00 1 * * /etc/backups/backup_script.sh
Toda segunda-feira às 04h:
00 04 * 1 * /etc/backups/backup_script.sh
Curtiu o conteúdo? Quer me ajudar? 🙂
Participe do canal no telegram para ficar atualizado sempre que publicar um novo tutorial.
Se quiser fazer uma doação para o café ficarei muito feliz pelo seu reconhecimento!
Se não puder doar pode deixar seu agradecimento nos comentário também ficarei feliz em saber que ajudei. Se tiver qualquer pergunta deixe-a também. Se preferir entrar em Contato clique aqui.
Abraço!
remontti fiz de tudo e sempre dando Erro ao compactar arquivo
Boa noite Remontti!
É possível fazer o backup dos Mikrotiks? Já tentou enviar o backup para Telegram?
Boa tarde, como faria o restore do banco de dados do zabbix a partir do arquivo gerado pelo backup?
Boa tarde, no script de backup onde esta “zip ${ARQUIVO} $5 &>/dev/null” e “tar -czpf ${ARQUIVO} $5 &>/dev/null” não seria $2 ?
Exato! Devo ter me passado rsrs, obrigado já acertei!