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: 97.831 ]

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

Lobos em peles de cordeiros

Traduzindo software com qualidade

O que você vai ser quando crescer?

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

Um níquel de volta

Leitura recomendada

Configurando um NAT

Atualização do Clamav 0.95.3 para 0.96

Instalando Debian Lenny no laptop Lenovo ThinKPad SL400

Usando Swap na RAM em Sabayon - ZRAM - Método novo

Configurando o X.org

  
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 pmichelazzo 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 pmichelazzo 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




Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts