7 November, 2007

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:

  1. javi@javi-dell:~/.ssh$ ssh-keygen -d
  2. Generating public/private dsa key pair.
  3. Enter file in which to save the key (/home/javi/.ssh/id_dsa): hola
  4. Enter passphrase (empty for no passphrase):
  5. Enter same passphrase again:
  6. Your identification has been saved in hola.
  7. Your public key has been saved in hola.pub.
  8. The key fingerprint is:
  9. 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:

  1. 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

  1. #!/bin/bash
  2.  
  3. # ARRAY con los directorios origen a copiar
  4. ORG[1]="/home/usuario/_TEMP/org1";
  5. ORG[2]="/home/usuario/_TEMP/org2";
  6. ORG[3]="/home/usuario/_TEMP/org3";
  7.  
  8. # ARRAY con los directorios destino
  9. DEST[1]="/home/usuario/_TEMP/dest1";
  10. DEST[2]="/home/usuario/_TEMP/dest2";
  11. DEST[3]="/home/pepe/";
  12.  
  13. # Usuario y host de la conexion, dejar en blanco para copiar al mismo equipo o unidad extraible
  14. conn[1]="";
  15. conn[2]="";
  16. conn[3]="pepe@picaso:";
  17.  
  18. # Opciones de rsync
  19. opts[1]=" -ah";
  20. opts[2]=" -ah";
  21. opts[3]=" -avhe";
  22.  
  23. # Especificamos el fichero de clave para autentificación, dejar en blanco si no se utiliza
  24. key[1]="";
  25. key[2]="";
  26. key[3]="ssh -i /home/pepe/.ssh/hola";
  27.  
  28. fecha=`date`
  29.  
  30.  
  31. # Recorremos los arrays con los directorios a copiar
  32. i=1;
  33. for j in ${ORG[*]}; do
  34.  
  35.     if (rsync ${opts[i]} "${key[i]}" ${ORG[i]} ${conn[i]}${DEST[i]} --log-file=backup.log ) then
  36.         echo "$fecha Sincronización terminada con EXITO">> backup.log;
  37.     else
  38.         echo "$fecha se ha producido un ERROR durante la sincronización">> backup.log;
  39.     fi
  40.     echo "-----------------------------------------------------------">> backup.log;
  41.  
  42.     i=`expr $i + 1`  #Incrementamos contador en 1
  43. done

Y finalmente lo añadimos a nuestro cron para que se ejecute periódicamente, por ejemplo:

  1. crontab -e
  2.  
  3. # m h  dom mon dow   command
  4. 00 22 * * * /home/usuario/backup.sh

Le decimos que se ejecute todos los días a las 22h.

No Comments »

No comments yet.

RSS feed for comments on this post. TrackBack URL

Leave a comment

Para proteger este sitio del dichoso spam responde a esta pregunta y antes de enviar tu comentario

Powered by WordPress
Bajo licencia Creative Commons
Contacto sanroman.javier at gmail.com