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.
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.
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:
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/
#
# 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.
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