Hospedagem Profissional

Hospedagem Profissional
Clique aqui e ganhe US$ 10,00 para testar durante 1 mês a melhor hospedagem: Digital Ocean!

quinta-feira, 19 de fevereiro de 2009

Utilizando o RSYNC para fazer backups de servidores e estações Windows

Por: Dailson Fernandes (fofão) - http://www.dailson.com.br

Quem utiliza o RSYNC para fazer backups entre máquinas Linux, sabe como é fácil manter backups centralizados e atualizados de forma fácil, eficiente e segura. Mas que tal você portar esta facilidade para estações e servidores Windows? Este artigo lhe ensina a fazer esta integração de forma rápida e fácil.

Estrutura deste artigo :

   1. Introdução
   2. Como usar o RSYNC e SSH no Windows
   3. Obtendo e instalando o cwRsync
   4. Exemplos
   5. Opções que você deve conhecer
   6. Usando a tarefa agendada ou o AT do Windows
   7. Fazendo com que o script de backup não peça senha
   8. Conclusões e créditos

Introdução

Este artigo pode ser acessado diretamente no site www.dailson.com.br.

Quem utiliza o rsync para fazer backups entre máquinas Linux, sabe como é fácil manter backups centralizados e atualizados de forma fácil, eficiente e segura. E ainda mais se sua unidade de fita for em um servidor Linux (como é o meu caso), você pode deixar seus scripts de backup rodando para reunir todos os dados importantes em uma única máquina para depois fazer o backup em fita magnética.

Antigamente (ou atualmente dependendo do Administrador da Rede) quando queríamos fazer backups entre servidores remotos e centralizá-los, geralmente utilizávamos o FTP, que através de alguns comandos é possível fazer a conexão, login e senha automático e ainda mandar todos os arquivos para serem feitos backups em um servidor. O grande problema aí é que o FTP manda a senha em texto plano pela rede e seus arquivos podem ser capturados durante a transferência.

O rsync, como o nome sugere, é um programa que sincroniza remotamente os dados entre duas máquinas. Por ser baseado no antigo rcp (remote copy), o software herdou as propriedades de criptografia do protocolo SSH, o que torna sua transmissão de dados mais segura que o FTP.
Além das propriedades de segurança, o rsync utiliza o protocolo remote-update, o que aumenta assustadoramente sua velocidade e diminui a quantidade de dados transferidos, pois são trocados entre os servidores somente as diferenças entre dois grupos de arquivos.

Se alteramos uma dúzia de arquivos numa porção de centenas, ao executar um rsync do seu desktop para o servidor, somente os arquivos alterados serão enviados por upload e você ainda não corre o risco de algum espertinho utilizando um sniffer na rede capturar sua senha de FTP em texto plano.

Resumindo, existem pelo menos quatro situações onde o rsync pode te ajudar:

  • copiando (ou sincronizando) arquivos entre dois diretórios locais;
  • copiando (ou sincronizando) arquivos de sua máquina local para um servidor remoto;
  • copiando (ou sincronizando) arquivos de um servidor remoto para sua máquina local;
  • listando os arquivos de um diretório no servidor remoto (como um "remote ls").

Só uma curiosidade, o rsync é desenvolvido por Andrew Tridgell, o mesmo autor do SAMBA. Veja em:http://samba.anu.edu.au/rsync/

Como usar o RSYNC e SSH no Windows

Você deve estar pensando em instalar o CYGWIN para começar com o ssh e rsync não é? ESQUEÇA! Deixe o CYGWIN pra lá, existe um aplicativo chamando cwRsync que instala apenas o necessário para sua máquina Windows se comunicar com qualquer servidor Linux na hora, feito caldo de cana! E ainda é possível fazer um servidor, ou seja, o Windows ser um servidor rsync para sincronização nas duas vias: Windows -> Linux e Linux -> Windows. Mas isto é objeto para outro artigo.

Uma dica, se você quiser basta copiar o diretório c:\Arquivos de Programas\cwRsync para qualquer estação que tem o mesmo efeito de usar o executável da instalação.
Bom, no Linux, já está tudo pronto, não precisa fazer nada (basicamente), pois a maioria das distribuições já trazem o ssh e rsync instalados por padrão, caso não tenha na sua distribuição, instale com o gerenciador de pacotes da sua preferência, ou baixe o código fonte e compile!
Rsync:


SSH:

A idéia

O principal para mim é fazer os backups dos arquivos importantes do usuário sem que ele perceba que todos os seus dados estão sendo guardados de forma segura independente da vontade dele.

Por exemplo, você quer guardar os documentos da empresa ou ainda os emails corporativos. Se você deixar esta responsabilidade nas mãos do usuário... bom ... você já sabe... Mas que tal deixar uma tarefa agendada que faz isso diariamente?

Obtendo e instalando o cwRsync

Você pode obter o cwRsync aqui. Basta baixar o primeiro arquivo: cwRsync_2.1.4_Installer.zip.
Instale cwRsync_2.1.4_Installer.zip confirmando todas as opções.

Pronto! Foi criado na pasta C:\Arquivos de Programas um diretório chamando cwRsync. Lá estão os binários do ssh e rsync e um arquivo de exemplo que é auto explicativo, porém vamos a alguns exemplos.

Configurando o arquivo .bat ou .cmd para fazer a sincronização

O funcionamento é simples, mas devem existir no cabeçalho do arquivo, a declaração de algumas variáveis, então deixa sempre o cabeçalho do arquivo desta forma:

@ECHO OFF
SETLOCAL
SET CWRSYNCHOME=%PROGRAMFILES%\CWRSYNC
SET CYGWIN=nontsec
SET HOME=%HOMEDRIVE%%HOMEPATH%
SET CWOLDPATH=%PATH%
SET PATH=%CWRSYNCHOME%\BIN;%PATH%

E logo abaixo destas linhas pode começar a escrever as linhas que vão copiar seus diretórios e/ou arquivos para um servidor remoto.


Exemplos

Em primeiro lugar, precisamos convencionar que:

  • C:\ para o rsync é /
  • C:\Arquivos de Programas para o rsync é /"Arquivos de Programas"
  • C:\Arquivos de Programas\Microsoft Office para o rsync é /"Arquivos de Programas/"Microsoft Office"
Opções:
  • --recursive ou -r = cópia recursiva, ou seja todos os arquivos e subdiretórios abaixo do diretório informado;
  • -a = modo arquivo;
  • -v = Modo detalhado (verbose).
Então vamos aos exemplos.
Obs: Lembrando que todas as linhas abaixo são inteiras com enter apenas no final.
Para o exemplo usaremos o servidor 192.168.0.1:

Usuário do servidor: root Local: Um HD de backup montado em /media/hd_backup

1. Fazer backup dos emails do outlook do usuário Dailson:

rsync -av /"Documents and Settings"/dailson/"Configurações Locais"/"Dados de aplicativos"/Microsoft/Outlook/outlook.pst root@192.168.10.202:/media/backup

2. Fazer o backup da pasta C:\Sistema Empresa:

rsync -av --recursive /"Sistema Empresa" root@192.168.0.1:/media/hd_backup

3. Guardar a pasta meus documentos do usuário dailson:

rsync -av --recursive /"Documents and Settings"/dailson/"Meus documentos" root@192.168.0.1:/media/hd_backup

4. Guardar a pasta HOME inteira do usuário dailson:

rsync -av --recursive /"Documents and Settings"/dailson root@192.168.0.1:/media/hd_backup

5. Fazer backup da pasta do banco de dados da empresa C:\Banco de Dados:

rsync -av --recursive /"Banco de Dados" root@192.168.0.1:/media/hd_backup

Obs1: Lembrando que todas as linhas abaixo são inteiras com enter apenas no final.
Então um script backup.bat completo com os exemplos acima ficaria desta forma:

@ECHO OFF
REM *****************************************************
REM Script de Backup
REM Autor: Dailson Fernandes
REM Data: 01/08/2008
REM Função: Faz o backup das pastas importantes do usuário
REM *****************************************************
SETLOCAL
SET CWRSYNCHOME=%PROGRAMFILES%\CWRSYNC
SET CYGWIN=nontsec
SET HOME=%HOMEDRIVE%%HOMEPATH%
SET CWOLDPATH=%PATH%
SET PATH=%CWRSYNCHOME%\BIN;%PATH%
rsync -av /"Documents and Settings"/dailson/"Configurações Locais"/"Dados de aplicativos"/Microsoft/Outlook/outlook.pst root@192.168.10.202:/media/backup
rsync -av --recursive /"Sistema Empresa" root@192.168.0.1:/media/hd_backup
rsync -av --recursive /"Documents and Settings"/dailson/"Meus documentos" root@192.168.0.1:/media/hd_backup
rsync -av --recursive /"Documents and Settings"/dailson root@192.168.0.1:/media/hd_backup
rsync -av --recursive /"Banco de Dados" root@192.168.0.1:/media/hd_backup


Opções que você deve conhecer

1. Mantendo a imagem do backup idêntica a origem

Um backup feito com rsync vai ser feito de forma incremental. Porém se o usuário renomear um arquivo, apagar ou mover da origem (por exemplo da pasta Meus Documentos), o rsync irá copiá-lo novamente e ficará um fantasma no destino, ou seja, se o usuário apagar alguns arquivo, eles continuaram no backup e o efeito colateral disso é que o backup crescerá sem parar.

A idéia é fazer o seguinte, quando o usuário apagar um arquivo, o arquivo deve ser apagado do backup também. A opção do rsync que faz isso é:
  • --delete
Então a linha correta para o backup da pasta meus documentos do exemplo anterior seria:

rsync -av --recursive --delete /"Documents and Settings"/dailson/"Meus documentos" root@192.168.0.1:/media/hd_backup

2. Evitando backup de alguns arquivos

Você não deseja detonar seu espaço em disco com as músicas e filmes do seu usuário não é? Você pode dizer ao rsync para evitar alguns tipos de arquivos, bastando para isso usar a seguinte opção:
  • --exclude="O que se quer evitar"
Exemplo: Vou evitar que vá para o backup os seguintes arquivos:
  • Arquivos de música (MP3, OGG, WAV, WMA...)
  • Arquivos de Filme (AVI, MPEG, MPG, FLV, MP4, WMV, AMV ...)
  • Programas e arquivos temporários (EXE, COM, TMP)
  • Fotos e imagens (JPG, JPEG, BMP ...)
Basta você separar com espaço e colocar quantas exceções quiser. E ainda pode utilizar coringas. Por exemplo:
--exclude=*.jpg --exclude=*.avi --exclude=*.mp3 ...

O nosso exemplo da pasta Meus Documentos já com estas opções tratadas neste tópico ficariam deste jeito:

rsync -av --recursive --delete -e "ssh -p 16117" --exclude=*.tmp --exclude=*.*~ --exclude=*.jpg --exclude=*.avi --exclude=*.mp3 --exclude=*.mp4 --exclude=*.wav --exclude=*.flv --exclude=*.wma --exclude=*.mpeg --exclude=*.mpg --exclude=*.wmv --exclude=*.exe --exclude=*.amv --exclude=*.com --delete /"Documents and Settings"/dailson/"Meus documentos" root@192.168.0.1:/media/hd_backup

Neste caso o script completo ficaria desta forma:
Obs: Lembrando que todas as linhas abaixo são inteiras com enter apenas no final.
Grave ele na raiz do C:\ e chame de backup.bat:

@ECHO OFF
REM *****************************************************
REM Script de Backup
REM Autor: Dailson Fernandes
REM Data: 01/08/2008
REM Função: Faz o backup das pastas importantes do usuário
REM *****************************************************
SETLOCAL
SET CWRSYNCHOME=%PROGRAMFILES%\CWRSYNC
SET CYGWIN=nontsec
SET HOME=%HOMEDRIVE%%HOMEPATH%
SET CWOLDPATH=%PATH%
SET PATH=%CWRSYNCHOME%\BIN;%PATH%
rsync -av /"Documents and Settings"/dailson/"Configurações Locais"/"Dados de aplicativos"/Microsoft/Outlook/outlook.pst root@192.168.10.202:/media/backup
rsync -av --recursive --delete --exclude=*.tmp --exclude=*.*~ --exclude=*.jpg --exclude=*.avi --exclude=*.mp3 --exclude=*.mp4 --exclude=*.wav --exclude=*.flv --exclude=*.wma --exclude=*.mpeg --exclude=*.mpg --exclude=*.wmv --exclude=*.exe --exclude=*.amv --exclude=*.com /"Sistema Empresa" root@192.168.0.1:/media/hd_backup
rsync -av --recursive --delete --exclude=*.tmp --exclude=*.*~ --exclude=*.jpg --exclude=*.avi --exclude=*.mp3 --exclude=*.mp4 --exclude=*.wav --exclude=*.flv --exclude=*.wma --exclude=*.mpeg --exclude=*.mpg --exclude=*.wmv --exclude=*.exe --exclude=*.amv --exclude=*.com /"Documents and Settings"/dailson/"Meus documentos" root@192.168.0.1:/media/hd_backup
rsync -av --recursive --delete --exclude=*.tmp --exclude=*.*~ --exclude=*.jpg --exclude=*.avi --exclude=*.mp3 --exclude=*.mp4 --exclude=*.wav --exclude=*.flv --exclude=*.wma --exclude=*.mpeg --exclude=*.mpg --exclude=*.wmv --exclude=*.exe --exclude=*.amv --exclude=*.com /"Documents and Settings"/dailson root@192.168.0.1:/media/hd_backup
rsync -av --recursive --delete --exclude=*.tmp --exclude=*.*~ --exclude=*.jpg --exclude=*.avi --exclude=*.mp3 --exclude=*.mp4 --exclude=*.wav --exclude=*.flv --exclude=*.wma --exclude=*.mpeg --exclude=*.mpg --exclude=*.wmv --exclude=*.exe --exclude=*.amv --exclude=*.com /"Banco de Dados" root@192.168.0.1:/media/hd_backup


Usando a tarefa agendada ou o AT do Windows

Bom, já que todo o trabalho está feito, só falta agendar a tarefa para que este script seja executado diariamente, ou de acordo com a sua necessidade. Mas não custa nada lembrar que da primeira acontecerá o seguinte:

1. Somente da primeira vez que você rodar o script, o rsync (ssh) pedirá para você aceitar a chave do host no qual está enviando os dados. Para isso basta digitar yes e pronto. Esta pergunta não acontecerá novamente.

2. A primeira cópia é completa e dependendo da quantidade de dados irá demorar um pouco. Porém se imediatamente após a cópia você chamar o script novamente, verá que o rsync não vai fazer nada. O rsync a partir da segunda cópia só vai copiar os arquivo que foram alterados, criados ou deletará do backup o que foi deletado da origem.

3. Para agendar a tarefa deste script rodar automaticamente diariamente ou a sua escolha vá em tarefas agendadas do Windows em:

Iniciar / Programas / Acessórios / Ferramentas / Tarefas Agendadas

Ou se preferir, use o AT do Windows, que é um agendador de tarefas semelhante ao do Linux que também roda em linha de comando. Se quiser aprender sobre o AT no Windows, visite a seguinte página:

Fazendo com que o script de backup não peça senha

Antes da cópia começar, o login é feito via ssh. Nesta hora o login é passado pela string root@192.168.0.1:/media/hd_backup, porém imediatamente depois é solicitada a senha.
Então este incomodo é gerado, ou seja, toda vez que a tarefa agendada iniciar o script de backup, a senha será solicitada. E se o usuário não tiver na frente do computador? Ou se esse backup for feito de madrugada?

Para resolver este problema, basta gerar as chaves pública e privada e fazer com que o cwRsync comece o backup sem intervenção humana.


Gerando as chaves


No servidor Linux, gere as chaves públicas e privadas da seguinte forma. No usuário que você fará a conexão sem senha (vou utilizar o root como exemplo), digite no terminal:


# ssh-keygen

Quando perguntado para entrar com uma "passphrase", apenas tecle "Enter" duas vezes para que fique em branco, caso contrário esta frase precisará ser digitada posteriormente.

A saída do comando é esta:

Generating public/private rsa key pair.
Enter file in which to save the key
(/root/.ssh/id_rsa):
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in
/root/.ssh/id_rsa.
Your public key has been saved in
/root/.ssh/id_rsa.pub.
The key fingerprint is:
xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx

Pronto, foram geradas suas chaves públicas e privada dentro do diretório /root/.ssh. São elas:

  • /root/.ssh/id_rsa (privada)
  • /root/.ssh/id_rsa.pub (pública)

Agora faça o seguinte:

# cat /root/id_rsa.pub >> /root/.ssh/authorized_keys


É importante que a chave pública (id_rsa.pub) seja adicionada (usando o sinal de maior maior ">>") dentro do arquivo "authorized_keys", pois podem haver outros clientes registrados neste mesmo arquivo.

Pegue o arquivo /root/.ssh/id_rsa (a sua chave privada) e copie no seguinte diretório na sua máquina Windows:

c:\Documents and Settings\seu_usuário\.ssh

Pronto!

Agora rode novamente o backup.bat e veja que o backup é feito sem nenhuma interferência.

A chave privada está em "/root/.ssh/id_rsa" e a pública em "/root/.ssh/id_rsa.pub".

Conclusões e créditos

Bom, estou compartilhando a solução que achei em meu trabalho de fazer backups de servidores e estações Windows de forma segura e íntegra. Utilizo esta forma há alguns anos sem quaisquer tipos de problemas.

Existem muito mais opções que podem ser utilizadas com rsync. Para isso consulte o manual.

Ele é muito bom e explicativo.

Se você tiver no Linux, digite "man rsync" ou consulte ele na web em:


A introdução foi retirada do artigo de Fábio Berbert de Paula em Transferindo arquivos com o rsync/.

Geração de chaves: Conexões SSH sem senha fácil e descomplicado

Este artigo pode ser acessado a partir do meu site em:


E lembrem-se...
Flames > /dev/null!

Fonte : http://www.vivaolinux.com.br/artigo/Utilizando-o-RSYNC-para-fazer-backups-de-servidores-e-estacoes-Windows/