rSync e alguns comandos
O
rSync, assim como o SCP, são ótimas ferramentas para transferências de arquivos entre máquinas, porém, possuem uma deficiência, eles são inseguros.
Originalmente, o rSync não utiliza nenhuma forma de criptografia, o que o torna um tanto ineficaz para backups via Internet. Entretanto, este problema pode ser facilmente resolvido, utilizando o nosso "canivete suíço"
SSH como meio de transporte, possibilitando automatizar a tarefa com um script básico.
Neste exemplo, vou me referir a máquina local como (A) e o servidor como (B). O comando com o
rsync, seria o seguinte:
rsync -av --rsh="ssh -l bkuser" /mnt/backup/ bkuser@IPServidorRemoto:/home/bkuser/backup/
Onde, no comando anterior:
- O parâmetro --rsh=ssh, orienta o rSync a utilizar o SSH como meio de transporte.
- O -l bkuser, informa com qual usuário o SSH deve conectar-se no servidor remoto (B).
- Adiante, vem a pasta local (A), o endereço IP do servidor remoto (B) e a pasta para onde vão os arquivos.
Naturalmente, para que tudo funcione, é necessário que o serviço SSH esteja em execução nas duas máquinas e que o usuário local (A) tenha um login de acesso na máquina servidora (B).
Os parâmetros
-av, fazem com que o rSync grave e atualize novos arquivos na pasta do servidor (B), caso o usuário apague arquivos na pasta local (A) e quiser que essa ação seja sincronizada com o servidor (B), será necessário adicionar o parâmetro
--delete.
Outro parâmetro interessante, é o
-z, que ativa a compressão na transferência dos arquivos reduzindo o volume de bytes transferidos.
O comando para deleção, seria o seguinte:
rsync -av --delete --rsh="ssh -l bkuser" /mnt/backup/ bkuser@IPremoto:/home/bkuser/backup/
O comando para compressão dos arquivos, seria o seguinte:
rsync -avz --rsh="ssh -l bkuser" /mnt/backup/ bkuser@IPremoto:/home/bkuser/backup/
Outra operação interessante, seria realizar um backup da máquina servidora (B) para a máquina local (A) em uma operação inversa, o comando seria o seguinte:
rsync -av --rsh="ssh -l bkuser" bkuser@IPremoto:/home/bkuser/backup/ /mnt/backup/
Observação: a barra no final do caminho faz toda diferença, sem ela, o comando criará um subdiretório e copiará os arquivos. Com ela, o comando só copiará os arquivos.
Algumas opções comuns do
rsync:
- -r :: cópia recursiva;
- -a :: modo de arquivamento;
- -v :: de modo verbose, para mostrar na tela tudo o que ele está fazendo;
- -z :: para compactar o arquivo durante a transferência (e descompactar no destino);
- -u :: modo update. Se o arquivo não foi atualizado, pula para o próximo, poupando tempo;
- -p :: preserva as permissões dos arquivos.
Existem diversas outras opções para o
rsync, bastando apenas uma consulta simples com o comando:
man rsync
Fatalmente, o usuário precisará fornecer a senha de acesso ao servidor, toda vez que executar o comando, o que impossibilita o uso em scripts de backup automático.
Para resolver esse problema, a melhor solução, é utilizar um par de chaves SSH com a passphrase em branco. Dessa forma, o usuário não precisa digitar a senha, tornando a operação automática.
Gerando as chaves SSH e automatizando o acesso
O primeiro passo, caso o administrador ainda não tenha feito, seria criar um usuário na máquina servidora (B). Esse usuário permitirá o acesso aos arquivos por parte da máquina local (A).
Nesse exemplo, foi criado o usuário bkuser na máquina (B), ou seja, no servidor que receberá os arquivos, com o comando:
# adduser bkuser
O passo seguinte será gerar as chaves SSH na máquina local (A), com o comando:
ssh-keygen -t rsa
Para isso, utilize um usuário normal do sistema, é recomendado não utilizar o root para essa operação por uma questão de segurança.
No Ubuntu, onde fiz os testes, as chaves nem foram criadas como root. Não precisa nomear o arquivo, deixe tudo em branco, assim como a passphrase.
Serão geradas duas chaves, a privada e a pública. As duas chaves se encontram no diretório home do usuário, com o qual foi dado o comando dentro da pasta oculta .ssh. É importante que as chaves estejam dentro desse diretório.
A chave pública será enviada para o servidor remoto (B), usando o comando:
ssh-copy-id -i ~/.ssh/id_rsa.pub bkuser@IPServidorRemoto
Se tudo ocorrer normalmente, o usuário já poderá logar-se no servidor remoto (B) sem precisar fornecer a senha. Isso poderá ser feito, executando o seguinte comando:
ssh bkuser@IPServidorRemoto
Isso, supondo que a porta seja a 22, que é a padrão do SSH. Caso não seja, utilize o parâmetro -p e especifique a porta.
Agora, é só gerar o script de backup com algum dos comandos mostrados e inserir uma linha no arquivo crontab, para que a operação seja automatizada.
Finalizando
Espero que dê certo com vocês.
Em meus testes, funcionou perfeitamente.
Qualquer dúvida, é só deixar um comentário.
Até a próxima.
1. rSync e comandos / SSH e automatização