miércoles, 2 de julio de 2008

Respaldo incremental con rsync y ssh

Buenas, aca dejo un artículo de como realizar respaldos incrementales mediante rsync y ssh, las pruebas estan hechas en kubuntu feisty en el server y en el cliente.

Paquetes a instalar en el servidor y cliente:

apt-get install openssh-server openssh-client rsync


En primer lugar hay que permitir que el servidor donde se van a realizar las copias de seguridad pueda acceder a la estación de trabajo sin contraseña, empleando claves RSA sin contraseña.

Para ello ejecutamos en el servidor lo siguiente, teniendo backuphcd como el usuario del servidor que hace los backups:


$ ssh-keygen -t rsa

Generating public/private rsa key pair.
Enter file in which to save the key (/home/backuphcd/.ssh/id_rsa):
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /home/backuphcd/.ssh/id_rsa.
Your public key has been saved in /home/backuphcd/.ssh/id_rsa.pub.
The key fingerprint is:
91:7e:ec:01:a2:e2:f5:d7:87:f6:2c:f7:38:87:71:04
backuphcd@sistemas2

Es importante no introducir contraseña.


Crear la carpeta para el usuario backuphcd logueado como adminstrador.


cd /home

sudo mkdir backuphcd

sudo chown -R backuphcd backuphcd

sudo chgrp -R migracion backuphcd

exit (termina sesión con el usuario administrador)



Copiar clave rsa publica creada en el servidor con el usuario backuphcd


scp /home/backuphcd/.ssh/id_rsa.pub backuphcd@192.168.1.xx:/home/backuphcd


Loguearse en el cliente con el usuario backuphcd

ssh 192.168.1.xx -l backuphcd (nos pide la contraseña)

mkdir .ssh

cat id._rsa.pub >> /home/backuphcd/.ssh/authorized_keys

rm id_rsa.pub


Con estos pasos ya podemos crear procesos automatizados en el servidor que conecten vía SSH a la estación de trabajo sin que se les pida contraseña, lo cual es razonable porque no pueden introducirla.


Crear la carpeta para alojar el respaldo de los clientes y los scripts de backups.

cd /

sudo mkdir backups

sudo mkdir -p backups/nombre_cliente ( esta carpeta para cliente en particular)

sudo chown -R backuphcd:migracion backups


Crear script para cada cliente.

sudo nano nombre_cliente.sh

#! /bin/bash  

TIMESTAMP=$(date "+%d-%m-%Y-hs%H:%M")
FROM="backuphcd@nombre_cliente:/ruta_carpeta_a_respaldar"
TO="/backups/nombre_cliente/"

if rsync --delete -avb $FROM $TO-nombre_cliente-$TIMESTAMP

then

echo "BACKUP OK"

else
echo "BACKUP FAILED"
fi


Crear script principal que llama a todos los demás.

sudo nano backup.sh

#! /bin/bash  

/backups/nombre_cliente1.sh

/backups/nombre_cliente2.sh

/backups/nombre_clienten.sh

Agregar el script backup.sh al cron


sudo nano /etc/crontab

# /etc/crontab: system-wide crontab

# Unlike any other crontab you don't have to run the `crontab'
# command to install the new version when you edit this file
# and files in /etc/cron.d. These files also have username fields,
# that none of the other crontabs do. SHELL=/bin/sh PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin
# m h dom mon dow user command

17 * * * * root cd / && run-parts --report /etc/cron.hourly
25 6
* * * root test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.daily )
47 6 * * 7 root test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.weekly )
52 6 1 * * root test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.monthly )

45 12 * * * backuphcd /backups/backup.bash

#

Resaltada la linea en cuestión que ejecuta /backups/backup.sh todos los dias a las 12:45 por el usuario bakuphcd.

Con esto tenemos bacups incrementales dentro de una carpeta con la fecha y hora de realización.
Saludos Hugo Acosta.


2 comentarios:

freemanrc dijo...

Hola!
Justo andaba buscando informacion para hacer algo asi.
Logré hacer que funcionara, pero siempre me pide la contraseña del usuario que respalda.
Creo que tengo el lio entre cual es el servidor y cual el cliente. Segun yo, el servidor es el "equipo que tiene los archivos que se necesitan respaldar" y el cliente "la maquina que va a ir a buscar esos respaldos para almacenarlos en su disco"

comoo los definiste?
saludos y gracias por la informacion.

Hugo Acosta dijo...

Hola, yo llamo servidor al equipo que almacena los respaldos de los demas equipos que necesitan respaldar su info, para que la clave publica funcione tenes q crearla con el usuario que vas a usar para realizar los respaldos (osea el que ejecuta el script) en el servidor (equipo que almacena los archivos) luego esa clave se exporta a los clientes tal como se explica en el articulo, cualquier cosa me avisas y trato de darte una mano, saludos...