Assine a Lista Dicas-L
Receba diariamente por email as dicas
de informática publicadas neste site
Para se descadastrar, clique aqui.
Sincronizando servidores com RSYNC.
Colaboração: André Jaccon
Data de Publicação: 27 de Dezembro de 2004
Neste tutorial iremos mostrar um exemplo de como usar o Rsync e o OpenSSH como ferramenta para sincronia de servidores.
A plataforma que estaremos usando como exemplo é a Gnu/Linux e a distribuição é a Debian Gnu/Linux 3.0 R2. O conteúdo a ser sincronizado será a pasta pública de um servidor Apache remoto.
1º) PASSO
Primeiramente iremos configurar o RSYNC e o servidor OpenSSH em nosso servidor, para isso verifique a presença dos pacotes com o comando:
#dpkg -l rsync ssh
caso a saída seja:
ii ssh ii rsync
isto significa que os pacotes estão atualmente instalados em seu servidor, do contrário os pacotes poderão ser instalador com o comando apt-get usando os mirror que contenha o pacote requisitado um exemplo é o:
deb http://security.debian.org/ stable/updates main
depois use:
apt-get update ; apt-get install rsync ssh
2º) PASSO
O segundo passo consiste em criar as chaves RSA de 1024 bits que irão implementar o sistema de segurança em nosso sistema sem a necessidade de autênticação manual.
Para isso usaremos o comando ssh-keygen para gerar a chave pública RSA:
# ssh-keygen -t rsa -b 1024
* Será importante lembrar que para gerarmos uma chave que autêntique automáticamente devemos chamar o comando anterior e teclar enter em todas as questões feitas pelo Ssh-keygen não preenchendo nenhum campo.
Feito isso será criado um arquivos dentro da pasta .ssh do usuário com o nome id_rsa.pub.
Copie está chave para o outro servidor; uma dica seria o comando scp:
# scp ~admin/.ssh/id_rsa.pub admin@servidor-remoto:~admin/.ssh/
depois copie o conteúdo da chave RSA para dentro do arquivo authorized_key remoto; uma dica seria:
# ssh admin@servidor-remoto 'cat ~admin/.ssh/id_rsa.pub >> ~admin/.ssh/authorized_key'
Reinicie o servidor remoto caso não funcionar na primeira vez.
3º) PASSO
O terceiro passo consiste em verificar as permissões para que o usuário admin consiga autênticar e executar as tarefas de cópia em nosso servidor.
Primeiramente sugiro que seja criado um usuário admin e que este usuário seja adicionado nos grupos dos quais os volumes serão copiados.
Ex:
# adduser admin, depois verifique as entradas de permissionamento em seu servidor para os volumes que serão sincronizados.
No exemplo a seguir, sincronizaremos todas as pastas públicas de um servidor Apache remoto para nosso servidor em copiando os arquivos para a pasta local /WWW-BAK, para isso escreveremos um script que rodará na máquina local com o seguinte conteúdo:
#!/bin/sh # DATA=``date +%d-%m-%Y`` INIT_TIME=``date +%H:%M`` END_TIME=``date +%H:%M`` echo "Iniciando backup do dia $DATA em: $INIT_TIME" > REPORT-$DATA.log rsync -Cravz --progress --partial --delete-excluded admin@servidor-remoto:/var/www /WWW-BAK echo "Finalizando o backup em: $END_TIME" >> REPORT-$DATA.log
Salve o script com o nome sincronia-apache.sh na pasta /root/admin/
4º) PASSO
Criaremos agora um rotina no Crontab que todos os dias as 0:00 horas o script será executado e assim irá sincronizar nosso conteúdo remoto do servidor Apache.
# crontab -e 0 0 * * * sh /root/admin/sincronia-apache.sh
Salve a rotina e saia do aplicativo.
Com isso você terá um sistema simples de sincronia segura de conteúdo entre servidores usando a ferramenta RSYNC e OpenSSH.
Caso queira um script mais robusto que crie logs diários e ainda notifica via e-mail sobre a rotina de sincronia baixe o script que escrevi em:
http://fsbox.org/repositorio/scripts/shell/sync-server.tar.gz
a instalação se dá através do script install.sh e a documentação poderá ser verificada no documento INSTALL.
Veja a relação completa dos artigos de André Jaccon
Referências Adicionais
Referências adicionais sobre os assuntos abordados neste site podem ser encontradas em nossa Bibliografia.
Avalie esta dica
Opinião dos Leitores
19 Nov 2009, 15:35
16 Jan 2009, 11:21
Muito útil o script, porém tive que fazer algumas modificações no script para um melhor acompanhamento do log. Tive que tirar também as duas aspas simples e deixar apenas uma...
#!/bin/sh
DATA=`date +%d-%m-%Y`
INIT_TIME=`date +%H:%M:%S`
echo "Iniciando backup do dia $DATA em: $INIT_TIME" >> Registro-backup.log
rsync -Cravz --progress --partial --delete-excluded admin@servidor-remoto:/var/www /WWW-BAK
END_TIME=`date +%H:%M:%S`
echo "Finalizando o backup em: $END_TIME" >> Registro-backup.log
07 Mar 2008, 16:03
1. É melhor utilizar o comando ssh-keygen -t dsa -f ~/.ssh/id_dsa uma vez q o dsa é pro ssh2 enquanto o rsa é do ssh1;
2. o arquivo ~admin/.ssh/authorized_key esta escrito errado. O correto seria ~admin/.ssh/authorized_keys
Só estou informando pq isso me rendeu mais de uma hora de dor de cabeça aqui! e não quero que outras pessoas passem pela mesma coisa...
Valeu pela ajuda...











