Como fazer a sincronização e/ou backup de dados entre máquinas usando SSH sem senha. De quebra ainda vamos criar um script para efetuar o backup diário de seu diretório de dados.
Pode parecer estranho o título do tutorial. E é estranho mesmo. Mas pior
seria o verdadeiro título como "rsync utilizando SSH sem que você tenha
que digitar a senha de acesso todas as vezes que rodar o script". Como
este título seria muito grande, resolvi abreviar e explicar ao longo do
tutorial.
Todos nós temos a necessidade de fazer cópias de segurança (ou backup) de
informações, sejam estas entre estações e um servidor, entre servidores ou
até mesmo entre estações. O Linux* conta com várias ferramentas
interessantes para estas tarefas, sendo uma delas o rsync, um
pequeno aplicativo que permite a cópia de arquivos de uma máquina para
outra de forma segura.
Não estarei aqui discutindo como usar o rsync, mas sim como permitir que um
script acesse um servidor ou outra máquina sem que o usuário tenha que
digitar a senha de acesso, podendo assim agendar o script para que seja
executado de tempos em tempos.
Como fazer
Para que não seja necessário informar a senha todas as vezes que vamos
fazer uma cópia dos arquivos de uma máquina é preciso exportá-la para a
máquina remota. Com isso, a máquina local (que irá receber os arquivos),
pode sem complicações fazer executar os comandos necessários para a operação.
A primeira linha faz com que seja criada uma chave DSA e esta seja
armazenada no arquivo id_dsa. Observe que neste caso está sendo
usado o parâmetro DSA devido ao suporte ao SSH versão 2. Se seus sistemas
somente suportam SSH versão 1, mude esta opção para rsa1.
As outras duas linhas colocam a chave criada dentro do arquivo de chaves
autorizadas tanto na máquina que serve os arquivos quanto na que recebe.
Na segunda linha troque maquina_remota pelo endereço IP da máquina
que vai servir os arquivos.
Pronto! Agora podemos criar um script para fazer a cópia dos arquivos:
#!/bin/bash
#
# backup.sh
#Script para fazer copia de arquivos do servidor para a maquina de backup
#
# Criado por Paulino Michelazzo - paulino@michelazzo.com.br
# Versão 1.0 - marco/04
#
#
rsync -avz root@maquina_remota:/origem_dos_dados/ /destino_dos_dados/
E podemos agendar para que este script seja executado todas as madrugadas
às 2 da manhã, colocando a seguinte linha dentro do arquivo /etc/crontab:
0 2 * * * root /etc/backup.sh
Pronto! Agora todos os dias às 2 da manhã, os arquivos da máquina remota
serão copiados, em suas últimas versões/alterações para a máquina de destino
(ou local), permitindo que, em caso de qualquer problema, estes possam ser
colocados novamente nos seus devidos lugares.
[2] Comentário enviado por cabelo em 31/03/2004 - 14:05h
Parabens Paulo:
Só tem fera nesta comunidade! Eu estava precisando criar algo semelhante para sincronizar os códigos fontes. Com este artigo, meu problema esta resolvido.
[4] Comentário enviado por cmarcelo em 03/04/2004 - 18:43h
Aproveitando este Artigo eu gostaria de tirar uma dúvida em relação ao rsync
Por exemplo, eu tenho o servidor A e B e os arquivos x, y, z que estão no A, eu passo o 1o rsync e o servidor B fica com esses 3 arquivos, mas caso eu delete um dos arquivos em A, ele mantém em B, ou seja a origem e o destino não ficam sempre iguais....
[5] Comentário enviado por alphainfo em 05/04/2004 - 10:50h
Caríssimos,
acho que vale a pena abordar a questão da configuração do SERVIDOR rsync, que inclue os arquivos rsyncd.conf e rsyncd.secrets... levei muita portada até entender a existência desse arquivo.
Mas com certeza, enche os olhos da galera que desenvolve, além de quebrar meu galho fazendo uma máquina redundante.
[8] Comentário enviado por Guaraldo em 24/11/2004 - 18:20h
Opa...
Fiz umas alteracõezinhas para torná-lo multiusuário e multiservidor...
Vê o que tu acha (chamei de versão 1.1 do script):
#!/bin/bash
#
# backup.sh
#Script para fazer copia de arquivos do servidor para a maquina de backup
#
# Criado por Paulino Michelazzo - paulino@michelazzo.com.br
# Versão 1.0 - marco/04
#
# Alterado para tornar-se multiusuário e multiservidor por:
# Luiz Guaraldo - guaraldo@universolivre.com.br
# Versão 1.1 - novembro/04
#
if [ '$2' ]; then
user=$1
serv=$2
dest=$USER
else
user=$USER
serv=$1
dest=$USER
fi
SYNC_LOG=/var/log/rsync.log # local onde o arquivo de log será armazenado
# Delimitador de entrada de log
echo "******************************" >> $SYNC_LOG
date >> $SYNC_LOG
echo "[$USER] Inicio da sincronização" >> $SYNC_LOG
rsync -avz $user@$serv:/home/$user /home/$USER >> $SYNC_LOG
echo "[$USER] Fim da sincronização" >> $SYNC_LOG
echo "******************************" >> $SYNC_LOG
[11] Comentário enviado por renatopradop em 08/12/2006 - 15:17h
olá amigao... blz? olha soh, seu artigo me quebrou um galhão, foi otimo e resolveu meu problema 100%, so que me gerou outro problema q naum consigo resolver.
Quando estas chaves são geradas, os servidores de origem e destino estabelecem uma relação de confiança, permitindo q eu consiga loga em um e em outro sem autenticação, como eu faço pra desabilitar isso após a transferencia do rsync, ou seja, desabilitar essa chave RSA ? e so habilitá-la na hora da transferencia ? []'s
[12] Comentário enviado por apamaio em 29/06/2007 - 15:44h
Meus parabéns pelo artigo e muito obrigado. Obrigado pois vai facilitar muito meu trabalho de backups do server Linux. Após fazer algumas adaptações irei começar a busca por uma solução de Win para Linux (se é que existe).
Grand abraço.
[13] Comentário enviado por mariomol em 08/02/2008 - 16:45h
Ola, muito bem! Mas comigo, testando em 8 servers, apenas consegui em um! Nos demais só funciona sem senha usando a chave para o usuário root! Qualquer outro usuário que tento criar a chave nao funciona, ele pede senha! Já tentei com rsa, dsa e copio sempre em /home/usuario/.ssh , somente com root q fica em /root/.ssh/! Alguma dica? Obrigado
[15] Comentário enviado por actdl em 04/11/2008 - 19:45h
Prezado colega, primeiramente parabéns pelo seu artigo. Estou enfrentando agora um problema sobre seu artigo, que ainda não consegui resolver, que é o seguinte:
Re-instalei o servidor remoto e esqueci a passphrase do servidor de backup. Alterei o passphrase do sv bkp, e não consigo mais estabelecer uma relação contínua entre os dois, pq este servidor que NÃO foi formatado recusa o acesso do outro por ssh, em razão do codigo RSA gerado. Como refazer o codigo RSA? se alguem puder indicar um artigo, eu agradeço!
[16] Comentário enviado por actdl em 07/11/2008 - 00:15h
resolvi o problema acima, mas de maneira insegura, coloquei o passphrase vazio, pq se for colocado algo, os servidores pedirão este passphrase, e o cron não executará o rsync. Se tiver alguém uma dica de colocar o passphrase com palavras, e estabelecer a sincronia com o cron, me digam! ah, sobre o RSA do servidor que já tinha uma relação de confiança, movam ou apaguem /root/.ssh/know..., esqueci o nome todo do arquivo agora. hehehe
[17] Comentário enviado por sakaiarnaldo em 26/07/2009 - 18:36h
estacao windows e servidor de backup linux.
como deixar rsync na estacao windows sem senha.
preciso copiar estacao xp para o servidor linux sem pedir senha.