Rsync sem senha

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.

[ Hits: 83.443 ]

Por: Paulino Michelazzo em 31/03/2004 | Blog: http://www.michelazzo.com.br


Introdução



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.

Para exportar a senha, use os seguintes comandos:

# ssh-keygen -t dsa -f ~/.ssh/id_dsa
# cat ~/.ssh/id_dsa.pub | ssh root@maquina_remota 'cat - >> ~/.ssh/authorized_keys'
# cat ~/.ssh/id_dsa.pub >> ~/.ssh/authorized_keys


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.

    Próxima página

Páginas do artigo
   1. Introdução
   2. Incrementando o script
Outros artigos deste autor

Liberte seus documentos

Lobos em peles de cordeiros

Força-tarefa brasileira disponibiliza versão do TikiWiki em Português do Brasil

Um níquel de volta

Traduzindo software com qualidade

Leitura recomendada

VMWare Server no Debian Linux 4.0 (Etch) (i386 e AMD64)

Instalação do Funtoo a partir do Debian já instalado

Configurando o Arch Linux

Configuração de rede no AIX IBM

Deixando o Fluxbox com a sua cara

  
Comentários
[1] Comentário enviado por fabio em 31/03/2004 - 13:36h

Esse recurso de autenticação sem senha é muito útil, só o que economizo de digitação por dia não está no gibi. Excelente artigo!

E pra quem quiser saber um pouco mais sobre rsync, aqui mesmo no site tem um artigo que pode complementar este:

Transferindo arquivos com o rsync
http://www.vivaolinux.com.br/artigos/verArtigo.php?codigo=338

[]'s

[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.

[3] Comentário enviado por jeffestanislau em 01/04/2004 - 10:47h

Parabéns Paulo,

Seu artigo é uma mão na roda... muito útil mesmo!!!

[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....

Alguém sabe como eu resolvo isso?

[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.

[]'s à todos os pinguins!

Daniel

[6] Comentário enviado por alphainfo em 05/04/2004 - 10:57h

cmarcelo, o que vc quer saber é se ele consegue deletar o arquivo que foi removido do cliente no servidor?

Se o que vc quer é, por exemplo, copiar apenas os arquivos alterados, temos a flag --existing.

de novo []'s

[7] Comentário enviado por gilmol em 18/05/2004 - 17:22h

Muito bom! Vai me quebrar um galhão!

Gilmol

[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

[9] Comentário enviado por michelazzo em 24/11/2004 - 18:29h

Muito bom hein!

Vou colocar no meu site a atualização do script.

Valeu!!!

[10] Comentário enviado por tarcio em 21/09/2006 - 15:17h

+ uma versão do script


#!/bin/bash
# Tárcio Meireles - tarcio . net (a) gmail . com
log="/var/log/backup.log"
#user@serv:/origem;destino;velocidade
conf[1]="root@$192.168.0.1:/diretorio1;/mnt/bkp01;50"
conf[2]="root@$192.168.0.1:/caminhodiretorio2;mnt/bkp02;40"

for X in ${conf[*]}
do
origem=$( echo $X | cut -f1 -d";")
dest=$( echo $X | cut -f2 -d";")
veloc=$( echo $X | cut -f3 -d";")
dti=$(date +%F-%X)
echo "rsync --bwlimit=$veloc -Cravzp $origem $dest"
dtf=$(date +%F-%X)
echo "I:$dti|F:$dtf|$origem|$dest|$veloc" >> $log
done

neste caso fica + facil configurar pois é só informar a origem o destino e a velocidade

[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

[14] Comentário enviado por michelazzo em 08/02/2008 - 16:49h

Olá Mariomol

Quais são os SO's que está testando? Este artigo está no ar há 4 anos e poucos foram os problemas que tive report dele.

Poderia fornecer maiores infos?

Abs

[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.

[18] Comentário enviado por removido em 31/05/2010 - 12:17h

exelente artigo!

estava procurando apenas como usar o ssh sem senha e ele funcionou perfeitamente aqui no meu debian!

[19] Comentário enviado por DonFellipe em 12/08/2010 - 03:41h

Muito obrigado, me foi muito útil!
Um abraço

[20] Comentário enviado por selvaking em 25/02/2011 - 19:04h

Valeuz! Foi uma mão na roda! E viva o Linux!

[21] Comentário enviado por Carlos Domingues em 14/02/2012 - 14:48h

Fiz o procedimento conforme orientado, mesmo assim pede senha na hora do sicronismo. Indepedente se aciono o sync do receptor ou do origem.


[22] Comentário enviado por rogeriosilverio em 14/11/2012 - 15:10h

Perfeito! Simples e Objetivo...Me ajudou bastante... Parabéns!

[23] Comentário enviado por rappa888 em 02/10/2014 - 12:56h

amigo, aqui funcionou.. mas só quando estou com a porta ssh 22.

no caso os meus ssh tem a porta 2230, ai este comando:
rsync -avz --rsh='ssh -p2230' /tmp root@192.168.5.66:/tmp

ai desta maneira continua pedindo senha, podes me ajudar ?


[24] Comentário enviado por gucoelho em 12/05/2015 - 10:11h

Para contribuir com o artigo

Talvez é necessário dar permissão 644 para o arquivo authorized_keys e só deu certo após dar essa permissão :
# chmod 644 authorized_keys


Contribuir com comentário