Backup automatizado e seguro usando SSH / SCP / SFTP

São muitos os scripts de backup existentes hoje na Internet para o fim de agilizar e automatizar esse importante e muitas vezes esquecido item de Segurança da Informação. Mas poucos se preocupam em como esses dados serão enviados, podendo criar mais problemas do que solução.

[ Hits: 113.070 ]

Por: Carlos Vinícius Braga dos Santos em 29/05/2007 | Blog: http://slaypher.wordpress.com


A hora da verdade! O backup



Finalmente vamos ao famoso backup, para tal criei um script em shell, já mais elaborado que o primeiro, que fará essa tarefa pra gente. Segue o código, defina o nome de backup_geral.sh:

#!/bin/bash

###########################
# BACKUP GERAL COM SSH/SCP #
# Carlos Vinícius Braga dos Santos #
# msn: slaypher.code@hotmail.com #
# email: slaypher.code@gmail.com #
#########################

USUARIO="pequenogrilo"
SERVIDOR="192.168.0.1"
PORTA="2222"
DIRETORIO="/backup"

if [ $# -eq 0 ]; then
  echo
  echo "Nenhum diretório especificado."
  echo "Usar: $0 DIR1 [DIR2] [DIR3] ..."
  echo
  exit 1
fi

echo
for i in $*; do
  if [ -d $i ]; then
    echo -n "Compactando o diretório: \"$i\" ... "
    tar -czf BKP_`basename $i`_`date +%Y_D%d_M%m`.tar.gz $i
    echo "Concluido!"
  else
    echo "O parâmetro \"$i\" não e um diretório ou não foi encontrado."
  fi
done

sleep 1
echo
for i in $*; do
  if [ $(du BKP_`basename $i`_`date +%Y_D%d_M%m`.tar.gz | cut -f1) -gt 10000 ]; then
    echo -n "Quebrando BKP_`basename $i`_`date +%Y_D%d_M%m`.tar.gz em pedacos de 10MB ... "
    split -b 10m BKP_`basename $i`_`date +%Y_D%d_M%m`.tar.gz BKP_`basename $i`_`date +%Y_D%d_M%m`.tar.gz.
    echo "Concluido!"
  fi
done

sleep 1
echo
for i in $*; do
  if [ $(du BKP_`basename $i`_`date +%Y_D%d_M%m`.tar.gz | cut -f1) -le 10000 ]; then
    echo -n "Enviando o anexo: BKP_`basename $i`_`date +%Y_D%d_M%m`.tar.gz ... "
    scp -P $PORTA BKP_`basename $i`_`date +%Y_D%d_M%m`.tar.gz $USUARIO@$SERVIDOR:$DIRETORIO
    echo "Concluido!"
    rm BKP_`basename $i`_`date +%Y_D%d_M%m`.tar.gz
  else
    for j in `ls BKP_$(basename $i)_$(date +%Y_D%d_M%m).tar.gz.*` ; do
      rm BKP_`basename $i`_`date +%Y_D%d_M%m`.tar.gz 2>/dev/null >/dev/null
      echo -n "Enviando o anexo: $j ... "
      scp -P $PORTA $j $USUARIO@$SERVIDOR:$DIRETORIO
      echo "Concluido!"
      rm $j
    done
  fi
done    

echo
echo "BACKUP CONCLUIDO!"
echo

Como essa belezura funciona? Simples, devem ser especificados quais diretórios deverão ser "backupeados", lembre-se diretórios somente.

A partir daí ele irá compactar usando o comando tar e gzip como parâmetro, depois verificará se o tamanho do backup gerado é maior que 10MB, se for ele quebra em partes de 10MB usando o split que poderá ser montado facilmente com o comando cat.

Após quebrar o arquivo, se necessário claro, ele começa a enviar usando o scp direto para o servidor e diretório que foram especificados nas variáveis do script logo no inicio. Depois de tudo pronto, apaga os arquivos criados e finaliza o script.

Vale lembrar que os valores do tamanho a ser rateado o arquivo pode ser alterado se for essa a sua vontade, de 10MB para o valor que achar melhor.

Mas lembrando do início, ele não pode enviar sem especificar uma senha, por isso, devemos usar o comando ssh-keygen para gerar uma chave pública que possamos enviar ao servidor e dizer que o nosso host é confiável. Para tal, use o comando:

Ele vai criar as chaves no diretório ~/.ssh:

# ssh-keygen -t rsa
# cd ~/.ssh
# scp -P 2222 id_rsa.pub pequenogrilo@192.168.0.1:/backup


Informe a senha dessa vez, e ele enviará a chave para o servidor. Agora no servidor faça o seguinte:

Lembra que criamos o diretório .ssh não foi em vão:

# cd /home/pequenogrilo/.ssh
# mv /home/pequenogrilo/backup/id_rsa.pub .
# cat id_rsa.pub >> authorized_keys
# cp -R . /home/pequenogrilo/backup


Pronto, teoricamente... Basta agora reiniciar o servidor sshd com o comando:

# /etc/rc.d/rc.sshd restart

E vamos aos testes, com o script de backup já no servidor, execute-o e passe os diretórios que queira efetuar backup.

Com isso damos as permissões caso já não tenha feito e iniciamos o processo de backup dos diretórios "faculdade", "site" e "confidencial".

# chmod 700 backup_geral.sh
# ./backup_geral.sh faculdade/ site/ confidencial/


Após alguns instantes, tudo deverá estar lá em "/home/pequenogrilo/backup". Dê uma checada após o final do script e seja feliz!

Backup completo!

Página anterior     Próxima página

Páginas do artigo
   1. Introdução
   2. Configurando servidor SSH
   3. O shell restrito chamado RSSH
   4. Criando jaula SSH de segurança (Jail)
   5. A hora da verdade! O backup
   6. Considerações finais
Outros artigos deste autor

Você sabe o que é INODE?

Utilizando atributos em partições ReiserFS

Traduzir dicas e mensagens do login

Leitura recomendada

TinyOS

Verificação de integridade de arquivos - Ferramenta OSSEC

Atirando o pau no gato com Metasploit

Utilizando SSH com método de autenticação publickey + ssh-agend + ssh-add

A mitologia da imunidade a vírus no Linux

  
Comentários
[1] Comentário enviado por mbsalgueiro em 29/05/2007 - 10:24h

Cara parabens pelo artigo! Gostei d+ q vou comecar a usa-lo no servidor aqui q dou suporte! =)
So me tira uma duvida eu quero aumentar o tamanho do bk eu mudo essas duas linhas neh?

if [ $(du BKP_`basename $i`_`date +%Y_D%d_M%m`.tar.gz | cut -f1) -gt 10000 ];

if [ $(du BKP_`basename $i`_`date +%Y_D%d_M%m`.tar.gz | cut -f1) -le 10000 ];

e retiro essa pq ela eh p quebrar se o bk for maior de 10Mb

split -b 10m BKP_`basename $i`_`date +%Y_D%d_M%m`.tar.gz BKP_`basename $i`_`date +%Y_D%d_M%m`.tar.gz.

vlww pela att!
abraco

[2] Comentário enviado por slaypher em 29/05/2007 - 23:30h

Olá,

Desculpe a demora para responder, e espero que o artigo junto com o script venha a ser muito útil para você.

Mas respondendo sua questão, você pode também alterar apenas os valores, caso queira um volume maior na quebra, por exemplo 50MB, basta alterar os valores para a sua necessidade ou comentar a parte da quebra dos pacotes.

[]'s

[3] Comentário enviado por cilmar_oliveira em 07/02/2008 - 22:45h

Muito útil....bom mesmo...
valew

[4] Comentário enviado por Maielo em 11/02/2008 - 17:25h

Parabéns pelo artigo, ajudou muito.


Vlw =]]

[5] Comentário enviado por marujo em 19/01/2009 - 11:24h

Irmãozinho parabéns, está muito bem elaborado e explicado...

[6] Comentário enviado por femars em 05/01/2010 - 10:38h

Mto bom, parabens!

[7] Comentário enviado por ls_ketzer em 24/03/2010 - 15:30h

Muito bom mesmo, meus parabens!!!

Feitas as devidas adaptações ta funcionando beleza...

[8] Comentário enviado por paulopmt1 em 26/06/2013 - 11:36h

Olá amigo,
este script faz verificação da data do arquivo antes de enviar (só envia se o arquivo de origem foi modificado)?

Parabéns pelo artigo!


Contribuir com comentário




Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts