Rsync Tutorial · 6 min read · Dec 13, 2025
Espelhe Seu Site Com rsync

Este tutorial mostra como você pode espelhar seu site do seu servidor web principal para um servidor de backup que pode assumir se o servidor principal falhar. Usamos a ferramenta rsync para isso, e fazemos com que ela seja executada através de um trabalho cron que verifica a cada x minutos se há algo para atualizar no espelho. Assim, seu servidor de backup deve estar geralmente atualizado se precisar assumir.
rsync atualiza apenas arquivos que mudaram, então você não precisa transferir 5 GB de dados sempre que executar o rsync. Ele apenas espelha arquivos novos/mudados, e também pode excluir arquivos do espelho que foram excluídos no servidor principal. Além disso, ele pode preservar permissões e propriedades de arquivos e diretórios espelhados; para preservar as propriedades, precisamos executar o rsync como root, que é o que fazemos aqui. Se as permissões e/ou propriedades mudarem no servidor principal, o rsync também as mudará no servidor de backup.
Neste tutorial, vamos tunelar o rsync através do SSH, que é mais seguro; isso também significa que você não precisa abrir outra porta em seu firewall para o rsync - é suficiente que a porta 22 (SSH) esteja aberta. O problema é que o SSH requer uma senha para fazer login, o que não é bom se você quiser executar o rsync como um trabalho cron. A necessidade de uma senha requer interação humana, o que não é o que queremos.
Mas, felizmente, há uma solução: o uso de chaves públicas. Criamos um par de chaves (em nosso servidor de backup mirror.example.com), uma das quais é salva em um arquivo no sistema remoto (server1.example.com). Depois, não seremos mais solicitados a uma senha quando executarmos o rsync. Isso também inclui trabalhos cron, que é exatamente o que queremos.
Como você já deve ter adivinhado a partir do que escrevi até agora, o conceito é que iniciamos o espelhamento de server1.example.com diretamente de mirror.example.com; server1.example.com não precisa fazer nada para ser espelhado.
Usarei a seguinte configuração aqui:
- Servidor principal: server1.example.com (server1) - Endereço IP: 192.168.0.100
- Servidor de espelho/backup: mirror.example.com (mirror) - Endereço IP: 192.168.0.175
- O site que deve ser espelhado está em /var/www no server1.example.com.
rsync é para espelhar apenas arquivos e diretórios; se você quiser espelhar seu banco de dados MySQL, use espelhamento/repliação MySQL em vez disso.
Quero dizer primeiro que esta não é a única maneira de configurar tal sistema. Existem muitas maneiras de alcançar esse objetivo, mas este é o caminho que vou seguir.
O primeiro passo é fazer login ou se tornar o usuário root em seu sistema. No Debian e centOS, use:
su -Se você estiver logado como um usuário diferente de root. No Ubuntu, use:
sudo -sem vez disso.
1 Instalar rsync
Primeiro, precisamos instalar o rsync em server1.example.com e mirror.example.com. Para sistemas Debian e Ubuntu, isso se parece com isto:
server1/mirror:
(Estamos fazendo isso como root!)
apt install rsyncEm outras distribuições Linux, você usaria yum / dnf (Fedora/CentOS) ou yast (SuSE) para instalar o rsync.
No CentOS / Rocky Linux ou AlmaLinux, use:
dnf install rsync2 Criar Um Usuário Não Privilegiado Em server1.example.com
Agora criamos um usuário não privilegiado chamado someuser em server1.example.com que será usado pelo rsync em mirror.example.com para espelhar o diretório /var/www (claro, someuser deve ter permissões de leitura em /var/www em server1.example.com).
server1:
(Estamos fazendo isso como root!)
sudo useradd -d /home/someuser -m -s /bin/bash someuserIsso criará o usuário someuser com o diretório home /home/someuser e o shell de login /bin/bash (é importante que someuser tenha um shell de login válido - algo como /bin/false não funciona!). Agora dê uma senha a someuser:
passwd someuser3 Testar rsync
Em seguida, testamos o rsync em mirror.example.com. Como root, fazemos isso:
mirror:
rsync -avz -e ssh [email protected]:/var/www/ /var/www/Você deve ver algo como isto. Responda com sim:
A autenticidade do host 'server1.example.com (192.168.0.100)' não pode ser estabelecida.
A impressão digital da chave RSA é 32:e5:79:8e:5f:5a:25:a9:f1:0d:ef:be:5b:a6:a6:23.
Você tem certeza de que deseja continuar conectando (sim/não)?<-- simEntão insira a senha de someuser, e você deve ver que o diretório /var/www do server1.example.com está espelhado para /var/www em mirror.example.com.
Você pode verificar isso assim em ambos os servidores:
server1/mirror:
ls -la /var/wwwVocê deve ver que todos os arquivos e diretórios foram espelhados para mirror.example.com, e os arquivos e diretórios devem ter as mesmas permissões/propriedades que em server1.example.com.
4 Criar As Chaves Em mirror.example.com
Agora criamos o par de chaves privada/pública em mirror.example.com:
mirror:
(Estamos fazendo isso como root!)
mkdir /root/rsync
ssh-keygen -t dsa -b 1024 -f /root/rsync/mirror-rsync-keyVocê verá algo como isto:
Gerando par de chaves dsa pública/privada.
Digite a frase secreta (vazia para nenhuma frase secreta): [pressione enter aqui]
Digite a mesma frase secreta novamente: [pressione enter aqui]
Sua identificação foi salva em /root/cron/mirror-rsync-key.
Sua chave pública foi salva em /root/cron/mirror-rsync-key.pub.
A impressão digital da chave é:
68:95:35:44:91:f1:45:a4:af:3f:69:2a:ea:c5:4e:d7 root@mirrorÉ importante que você não insira uma frase secreta, caso contrário, o espelhamento não funcionará sem interação humana, então simplesmente pressione enter!
Em seguida, copiamos nossa chave pública para server1.example.com:
mirror:
(Ainda estamos fazendo isso como root.)
scp /root/rsync/mirror-rsync-key.pub [email protected]:/home/someuser/A chave pública mirror-rsync-key.pub deve agora estar disponível em /home/someuser em server1.example.com.
5 Configurar server1.example.com
Agora faça login via SSH em server1.example.com como someuser (não root!) e faça isso:
server1:
(Por favor, faça isso como someuser!)
mkdir ~/.ssh
chmod 700 ~/.ssh
mv ~/mirror-rsync-key.pub ~/.ssh/
cd ~/.ssh
touch authorized_keys
chmod 600 authorized_keys
cat mirror-rsync-key.pub >> authorized_keysAo fazer isso, anexamos o conteúdo de mirror-rsync-key.pub ao arquivo /home/someuser/.ssh/authorized_keys. /home/someuser/.ssh/authorized_keys deve se parecer com isto:
server1:
(Ainda como someuser!)
vi /home/someuser/.ssh/authorized_keysssh-dss AAAAB3NzaC1kc3MAAA[...]lSUom root@
mirrorAgora queremos permitir conexões apenas de mirror.example.com, e o usuário que se conecta deve ser permitido a usar apenas rsync, então adicionamos
command="/home/someuser/rsync/checkrsync",from="mirror.example.com",no-port-forwarding,no-X11-forwarding,no-ptylogo no início de /home/someuser/.ssh/authorized_keys:
server1:
(Ainda como someuser!)
vi /home/someuser/.ssh/authorized_keyscommand="/home/someuser/rsync/checkrsync",from="mirror.example.com",no-port-forwarding,no-X11-forwarding,no-pty ssh-dss AAAAB3NzaC1kc3MAAA[...]lSUom root@
mirrorVocê deve usar um FQDN como mirror.example.com em vez de um endereço IP após from=, caso contrário, o espelhamento automatizado não funcionará!
Agora criamos o script /home/someuser/rsync/checkrsync que rejeita todos os comandos, exceto rsync.
server1:
(Ainda fazemos isso como someuser!)
mkdir ~/rsync
vi ~/rsync/checkrsync#!/bin/sh
case "$SSH_ORIGINAL_COMMAND" in
*\&*)
echo "Rejeitado"
;;
*\(*)
echo "Rejeitado"
;;
*\{*)
echo "Rejeitado"
;;
*\;*)
echo "Rejeitado"
;;
*\<*)
echo "Rejeitado"
;;
*\`*)
echo "Rejeitado"
;;
rsync\ --server*)
$SSH_ORIGINAL_COMMAND
;;
*)
echo "Rejeitado"
;;
esacchmod 700 ~/rsync/checkrsync6 Testar rsync Em mirror.example.com
Agora devemos testar em mirror.example.com se podemos espelhar server1.example.com sem sermos solicitados a senha de someuser. Fazemos isso:
mirror:
(Estamos fazendo isso como root!)
rsync -avz --delete --exclude=/stats --exclude=/error --exclude=/files/pictures -e "ssh -i /root/rsync/mirror-rsync-key" [email protected]:/var/www/ /var/www/(A opção –delete significa que arquivos que foram excluídos em server1.example.com também devem ser excluídos em mirror.example.com. A opção –exclude significa que esses arquivos/diretórios não devem ser espelhados; por exemplo, –exclude=/error significa “não espelhar /var/www/error”. Você pode usar várias opções –exclude. Listei essas opções como exemplos; você pode ajustar o comando para suas necessidades. Dê uma olhada em
man rsyncpara mais informações.)
Você deve agora ver que o espelhamento está ocorrendo:
recebendo lista de arquivos ... feito
enviado 71 bytes recebido 643 bytes 476.00 bytes/seg
tamanho total é 64657 aceleração é 90.56sem ser solicitado a uma senha! Isso é o que queríamos.
7 Criar Um Trabalho Cron
Queremos automatizar o espelhamento, por isso criamos um trabalho cron para isso em mirror.example.com. Execute crontab -e como root:
mirror:
(Estamos fazendo isso como root!)
crontab -ee crie um trabalho cron como este:
*/5 * * * * /usr/bin/rsync -azq --delete --exclude=/stats --exclude=/error --exclude=**/files/pictures -e "ssh -i /root/rsync/mirror-rsync-key" [email protected]:/var/www/ /var/www/ Isso executaria o rsync a cada 5 minutos; ajuste conforme suas necessidades (veja
man 5 crontab). Eu uso o caminho completo para o rsync aqui (/usr/bin/rsync) apenas para ter certeza de que o cron sabe onde encontrar o rsync. O local do seu rsync pode ser diferente. Execute
mirror:
(Estamos fazendo isso como root!)
which rsyncpara descobrir onde está o seu.
8 Links
- rsync: https://rsync.samba.org/
Receba novas postagens na sua caixa de entrada
Sem spam. Cancele a assinatura a qualquer momento.