terça-feira, 19 de julho de 2016

rsync | Backups automáticos com rsync por SSH

Servidor RSYNC

Neste exemplo utiliza-se um servidor ubuntu 16.04 LTS mas esta configuração deve funcionar para qualquer outra distribuição Linux com as devidas alterações.
Foi criado um utilizador designado utilizador.

0. Instalação
apt-get install rsync

É possível criar um local de trabalho, neste caso /srv/BACKUP
mkdir /srv/BACKUP
chown utilizador:utilizador -R /srv/BACKUP

1. Configuração
O ficheiro de configuração é /etc/rsyncd.conf e um exemplo simples:
uid = utilizador
gid = utilizador
socket options = SO_KEEPALIVE

[BACKUP]
    path = /srv/BACKUP
    comment = Backup [500GB]
    read only = false
    auth users = utilizador


Após a configuração é necessário ativar o modo de serviço (daemon) do rsync:
nano /etc/default/rsync
Deve descomentar-se a linha (remover o # no início):
RSYNC_ENABLE=true

Para arrancar o serviço:
service rsync start

As opções permitem a gestão básica: stop (parar), restart (reiniciar) e status (estado).

O reload não é necessário porque o rsync lê o ficheiro de configuração a cada nova ligação que recebe.

2. Testar o serviço
Para testar é possível recorrer a outra máquina que esteja na rede com o rsync instalado e executar:
rsync rsync://servidor
BACKUP             Backup [500GB]

Ao aceder ao módulo de BACKUP irá pedir uma palavra-passe, que não foi definida na configuração inicial, e, por isso, irá falhar:
rsync rsync://servidor/BACKUP
Password:
@ERROR: auth failed on module BACKUP
rsync error: error starting client-server protocol (code 5) at main.c(1524) [Receiver=3.0.7]


Cliente para backups

Para que o cliente possa enviar os ficheiros automaticamente sem haver pedido de senhas, é necessário configurar o acesso ao servidor por SSH por chave, isto é sem ser necessário introduzir uma palavra-passe. Esta forma é mais segura e permite a automatização das tarefas de backup pretendidas.

Neste caso é utilizada uma máquina cliente com o utilizador user que será o responsável pelo envio dos backups para o servidor.

0. Configuração do acesso por SSH com chave pública ao servidor
A criação das chaves no cliente com:
mkdir ~/.ssh/
ssh-keygen -t rsa

Copiar a chave criada para o servidor e habilitar o acesso SSH sem password para o utilizador do servidor:
ssh-copy-id utilizador@servidor

Testar para verificar se já não pede password com:
ssh utilizador@servidor


1. Script para Backups
Um script para automatizar os backups poderá ser o seguinte:
#!/bin/bash
# script by Mário Pinto @ 2016.07.19

# RSYNC SERVER - Complete URI for the server including protocol
SERVER="servidor"
USER="utilizador"
RSYNC_SERVER="$USER@$SERVER:/srv/BACKUP/"
COMMAND="rsync -qzar --delete"

# HOSTNAME and LOG_FILE
HOSTNAME=`hostname`
LOG_FILE=$HOSTNAME".log"
DATE=`date +%Y.%m.%d@%H:%M:%S`
START=`date +%s`

echo -e "HOST: $HOSTNAME\t $DATE\nBacking up to $RSYNC_SERVER$HOSTNAME" > $LOG_FILE

# Directories/Files to backup separated with a space ' '
BACKUP_DIRS="/home/user/DATA /home/user/ISO"

# Execute the backup for each directory/file specified
for i in $BACKUP_DIRS
do
  echo -ne "\tBacking up $i... " >> $LOG_FILE
  if $COMMAND $i $RSYNC_SERVER$HOSTNAME  ; then
    echo "OK" >> $LOG_FILE
  else
    echo "KO" >> $LOG_FILE
  fi
done


END=`date +%s`
DURATION=$(( $END - $START ))

echo -e "Done in $DURATION seconds." >> $LOG_FILE

rsync -qraz $LOG_FILE $RSYNC_SERVER"logs/"
cat $LOG_FILE
rm $LOG_FILE
exit 0


Poderá ser guardado como ~/rBackup

Deverá ser colocado como executável:
chmod 755 ~/rBackup

E testado:
./rBackup
HOST: cliente     2016.07.19@13:00:35
Backing up to utilizador@servidor:/srv/BACKUP/cliente
    Backing up /home/user/DATA... OK
    Backing up /home/user/ISO... OK
Done in 4 seconds.


2. Automatização do Backup
Se tudo for automático, resta criar um cronjob para o script, por exemplo:
crontab -e
 2 * * * nice /home/user/rBackup

Sem comentários:

Enviar um comentário