Backup com Rsync + SSH entre servidores

Created: Jan. 1, 2010, 4 a.m.
Update: March 31, 2020, 10:46 p.m.
Sistema de backup de tempos em tempos para servidores com muitas requisições

Precisei montar um servidor de backup para um servidor que não pode perder os dados e não pode ficar off line! A idéia é que o servidor de produção envie apenas os arquivos alterados de tempos em tempos, no meu caso eu configurei para enviar de hora em hora os arquivos que sofreram alteração, contrab. O backup diário é bom, mas no caso de uma empresa que inseri 500 notas fiscais por dia e só faz backup de madrugada, o servidor pode quebrar 10 minutos antes do iniciar o backup, então esse trabalho de inserir 500 NF vai para o lixo. Se feito de hora em hora pode ter perdas se quebrar, mas com certeza será menor.

Servidor A = servidor produção vai enviar os arquivos, 192.168.0.10
Servidor B = servidor Backup, recebe o backup, 192.168.0.20

Serviço necessário no servidor B: SSH

Vamos lá!

Servidor B, recomendo criar um usuário apenas para o backup.

Criar usario que ira receber o backup, coloque uma senha.

$ adduser --home /home/bkpremote --shell /bin/bash bkpremote

ssh localhost para configuar ambiente do novo usuário.

$ ssh bkpremote@192.168.0.10
$ mkdir ~/.ssh
$ chmod 700 ~/.ssh

Servidor A, Esse usuário tem que ter permissão para ler os arquivos que quer fazer backup, talvez usuário root.

Vamos para o home

$ cd

Se a chave não existe, vamos criar, tecle enter até o fim

$ ssh-keygen -t rsa -C "your_email@example.com"

Enviar a chave para servidor B, backup.

$ scp ~/.ssh/id_rsa.pub bkpremote@192.168.0.20:~/.ssh/.

Servidor B:

$ ssh bkpremote@192.168.0.10

Adicionar chave confiável.

$ cd .ssh

Se essa é a primeira chave confiável então:
$ mv id_rsa.pub authorized_keys

# se já existe então:
$ cat id_rsa.pub >> authorized_keys

Para testar, faça um conexão do servidor A para B, não é para pedir senha!

$ ssh bkpremote@192.168.0.10

Agora que temos a conexão pronta, vamos para o rsync.

Aqui estamos enviando o /home do servidor A (produção) para a raiz do conta bkpremote servidor B (backup)

$ rsync -avz -progress -partial -e "ssh -p 22" /home bkpremote@192.168.0.20:~/.

Para os noiado em segurança, você pode colocar mais umas coisas:

IP de origem da conexão ssh antes da chave no arquivo autorezed_keys, ex:

$ vim autorized_keys

from="192.168.0.10"  ssh-rsa AAAAB3NzaC.....

Importante o uso do aspas duplas, abre e fecha!

Problemas encontrados:

Se o home do usuario não for /home/USER pede senha! Aparentemente não funciona se não for esse caminho mesmo usando . ssh/authorized_keys com a chave pública, testado em Debian Squeeze.

Se o acesso ssh deve ser restrito a um cliente/backup, você pode restringir que ele adicione outras chaves, basta mudar as permissões do .ssh e autorized_key.

No meu caso o cliente não pode mexer nesse arquivo, então:

$ chown root.root /home/USER/.ssh -R

$ chmod 755 /home/USER/.ssh -R


Faça bom uso!
Mantenha o autor em caso de publicação!


Tiago de Souza Moraes - teago.futuria.com.br - 2020 // CSS by UIKIT CSS