Backups automáticos em um servidor externo, via SSH

Continuando o post de ontem, sobre backup de servidores, outra boa opção seria salvar os backups em um servidor externo, de preferência um servidor remoto, situado em outro estado ou em outro país. Usar dois servidores em locais diferentes elimina a possibilidade de algum tipo de desastre (como um incêndio ou uma inundação) destruir tanto o servidor quanto os backups.

Uma forma simples de fazer com que o script consiga transferir os arquivos automaticamente no final do processo é utilizar um par de chaves do SSH sem passphrase, o que permite que o script transfira arquivos usando o scp sem precisar lhe pedir a senha ou a passphrase de acesso ao realizar cada cópia. Isso oferece um risco moderado de segurança (já que se alguém tiver acesso ao primeiro servidor, poderá copiar o arquivo com a chave privada e assim obter acesso também ao segundo), mas ele pode ser reduzido caso você utilize uma conta limitada no segundo servidor.

O primeiro passo seria criar um usuário no segundo servidor, que será usado para permitir o acesso do script. Aproveite para já ajustar o diretório home, especificando a pasta que será usada para armazenar os backups, como em

# adduser –home /mnt/sdb1/backups bkuser

Em seguida, criamos o par de chaves que será usado para o acesso no primeiro servidor usando o comando “ssh-keygen -t rsa”. Ele deve ser executado usando o usuário que será usado para executar o script de backup. Se ele for ser executado pelo root, então o comando é também executado como root:

# ssh-keygen -t rsa

Como a idéia é criar uma chave que possa ser usada para login automático, simplesmente pressione Enter quando o ssh-keygen perguntar pela passphrase, deixando-a em branco.

O próximo passo é instalar a chave gerada no segundo servidor, usando o comando “ssh-copy-id”, especificando o usuário criado no passo anterior e o endereço do segundo servidor, como em:

# ssh-copy-id -i ~/.ssh/id_rsa.pub bkuser@backup.gdn.com.br

Com isso, o primeiro servidor passa a ter acesso direto ao segundo através do usuário “bkuser”, que usaremos para transferir os arquivos através do scp. Você pode fazer um teste transferindo um arquivo qualquer do primeiro servidor para o segundo, como em

# scp arquivo.tar.gz bkuser@backup.gdhn.com.br:/mnt/sdb1/backups/

Você perceberá que o comando será executado diretamente. O próximo passo é adicionar o comando para transferir o arquivo no seu script de backup, como neste exemplo:

#!/bin/sh

DATA=`date +%Y-%m-%d-%H.%M.%S`
cd /mnt/backup
tar -zcvf www-$DATA.tar.gz /var/www

scp www-$DATA.tar.gz bkuser@backup.gdhn.com.br:/mnt/sdb1/backups/
rm -f www-$DATA.tar.gz

Com isso, o script gera o arquivo com o backup, copia para o segundo servidor via scp e, depois de concluída a transferência, deleta a cópia local do arquivo, de forma que elas não se acumulem até acabar com o espaço em disco.

O passo final seria automatizar a execução do script, adicionando uma entrada no arquivo “/etc/crontab” (do primeiro servidor), como em:

59 4 * * * root /usr/local/bin/script-backup

Esta entrada faria com que o script fosse executado todos os dias às 4:59 da manhã, sempre gerando um novo arquivo com a data de quando foi executado e copiando-o para o segundo servidor, onde os backups ficarão arquivados.

Fonte: Link

Anúncios

~ por 3c0linux em julho 28, 2010.

 
%d blogueiros gostam disto: