Além de todas as respostas anteriores, aqui está uma que se baseia em chaves SSH com restrições sobre o que pode ser feito ao fazer login com essa chave.
No servidor A
Neste, é menos importante se você criar um usuário separado ou usar um de seus nomes de usuário existentes, mas se fosse eu, eu criaria um usuário separado. Usarei o nome bkpuser
de usuário para os dois servidores nos meus exemplos abaixo.
Quando conectado bkpuser
, crie uma chave SSH sem uma senha.
No servidor B
Ativar PubkeyAuthentication
no sshd_config
.
Crie o usuário bkpuser
. Defina uma senha muito complicada ou desative o login de senha para esse usuário (exatamente como você faz isso dependerá de qual unix e distro você está executando). O ponto é que o usuário deve efetuar login apenas com uma chave SSH. Verifique se bkpuser
possui acesso de leitura a todos os diretórios e arquivos que você deseja fazer backup.
Copie a parte pública da chave criada em A para ~bkpuser/.ssh/authorized_keys
B. Edite para executar automaticamente um comando na conexão. Esse comando não deve ser um ponteiro para um script de shell; em vez disso, insira o script de shell diretamente na chave. Inclua também uma limitação para que a chave possa ser usada apenas no servidor A e em nenhum outro servidor. No exemplo abaixo, estou dando ao servidor A o endereço IP 10.1.2.3
e estou assumindo que os arquivos nos quais quero fazer backup estão todos em baixo /data
.
from="10.1.2.3",no-port-forwarding,no-X11-forwarding,no-agent-forwarding,no-pty,command="cd /data;/usr/bin/tar -cf - *; /usr/bin/logger -t BACKUP -p daemon.info \"INFO: Backup-files on $HOST fetched from ${SSH_CLIENT%% *} by $USER\";" ssh-dss AA.....
No servidor A
Se você estiver usando uma das guias cron que suporta @reboot
entradas, adicione uma entrada como a bkpuser
s crontab com o comando ssh -i ~bkpuser/.ssh/id_dsa serverB > backup.tar.gz
. Se não permitir, defina-o a qualquer momento - se fossem meus dados, provavelmente o faria diariamente.