Automatizar copias de seguridad con rsync
Esta semana me he decidido por fin y he terminado de automatizar las copias de seguridad de mi escritorio ubuntu "Gutsy Gibbon" a un servidor debian "etch".
He utilizado rsync para transmitir todos mis ficheros, herramienta muy versátil con la que realizo mis copias de seguridad de forma incremental en un único sentido, para mantener sincronizados 2 directorios en ambos sentidos podemos utilizar unison.
Partimos de que los scripts los ejecutaremos desde la máquina cliente hacia el servidor. Lo primero que debemos conseguir para transferir los ficheros de forma programada es tener acceso al servidor sin que sea necesaria nuestra intervención. Para ello debemos generar un par de claves publica/privada sin palabra de paso en la máquina cliente y autorizar nuestra clave pública en el servidor. Ejecutamos la utilidad ssh-keygen y generamos las claves:
-
javi@javi-dell:~/.ssh$ ssh-keygen -d
-
Generating public/private dsa key pair.
-
Enter file in which to save the key (/home/javi/.ssh/id_dsa): hola
-
Enter passphrase (empty for no passphrase):
-
Enter same passphrase again:
-
Your identification has been saved in hola.
-
Your public key has been saved in hola.pub.
-
The key fingerprint is:
-
cf:f5:d1:58:52:20:1a:4d:17:70:4c:fa:fc:e0:fc:f5 javi@javi-dell
Hemos generado 2 ficheros: hola (clave privada) y hola.pub (clave pública). Con la opción -d indicamos que utilice el algoritmo dsa (ssh v1 utiliza claves rsa, mientras que ssh v2 utiliza claves dsa), a la primera pregunta respondemos con "hola" que será el nombre de nuestra clave, a continuación nos pedirá la palabra de paso, pulsaremos enter ya que no la necesitamos.
Ahora le mostraremos a nuestro servidor cual es la clave pública con la que nos vamos a conectar. Para ello copiamos el contenido del fichero hola.pub (nuestra clave pública) a una nueva linea del fichero /home/usuario/.ssh/authorized_keys de nuestro servidor, si no existe lo creamos.
Y probamos a conectar utilizando la clave creada:
-
ssh -i /home/usuario/.ssh/hola host
Podemos utilizar la opción -v para imprimir los pasos que se realizan para conectar y la opción -2 para forzar a que conecte mediante ssh2 si este no es nuestro protocolo por defecto.
Con esto ya deberíamos tener nuestros equipos autentificados mediante claves dsa.
Procedemos a crear el script que ejecutará los backups backup.sh
-
#!/bin/bash
-
-
# ARRAY con los directorios origen a copiar
-
ORG[1]="/home/usuario/_TEMP/org1";
-
ORG[2]="/home/usuario/_TEMP/org2";
-
ORG[3]="/home/usuario/_TEMP/org3";
-
-
# ARRAY con los directorios destino
-
DEST[1]="/home/usuario/_TEMP/dest1";
-
DEST[2]="/home/usuario/_TEMP/dest2";
-
DEST[3]="/home/pepe/";
-
-
# Usuario y host de la conexion, dejar en blanco para copiar al mismo equipo o unidad extraible
-
conn[1]="";
-
conn[2]="";
-
conn[3]="pepe@picaso:";
-
-
# Opciones de rsync
-
opts[1]=" -ah";
-
opts[2]=" -ah";
-
opts[3]=" -avhe";
-
-
# Especificamos el fichero de clave para autentificación, dejar en blanco si no se utiliza
-
key[1]="";
-
key[2]="";
-
key[3]="ssh -i /home/pepe/.ssh/hola";
-
-
fecha=`date`
-
-
-
# Recorremos los arrays con los directorios a copiar
-
i=1;
-
for j in ${ORG[*]}; do
-
-
if (rsync ${opts[i]} "${key[i]}" ${ORG[i]} ${conn[i]}${DEST[i]} --log-file=backup.log ) then
-
echo "$fecha Sincronización terminada con EXITO">> backup.log;
-
else
-
echo "$fecha se ha producido un ERROR durante la sincronización">> backup.log;
-
fi
-
echo "-----------------------------------------------------------">> backup.log;
-
-
i=`expr $i + 1` #Incrementamos contador en 1
-
done
Y finalmente lo añadimos a nuestro cron para que se ejecute periódicamente, por ejemplo:
-
crontab -e
-
-
# m h dom mon dow command
-
00 22 * * * /home/usuario/backup.sh
Le decimos que se ejecute todos los días a las 22h.
















