sábado, septiembre 24, 2005

rsync, ssh, cron: mantener la sincronización entre equipos

Una preocupación constante es perder la información almacenada en las computadoras (codigo, documentos, etc) por diversos motivos: daños de los equipos, robos, vandalismo no intencionado (conocido como estupidez propia o ajena). Cualquier cosa puede pasar y seguro que pasará cuando no tenemos respaldo o si lo tenemos está lo suficientemente desactualizado para ser de utilidad.

En Linux (muy probable en windows) la solución perfecta se optiene combinando SSH, RSYNC y CRON.

[En windows se puede usar una versión cygwin de rsync que funciona muy bien]

Lo primero será instalar estas tres piezas de software,

en Debian, la parte fácil:

apt-get install ssh cron rsync

Para evitar que los extremos se pregunten por password debemos compartir la llave pública entre el equipo de destino y el equipo de origen.

  • Generar la llave pública y privada en cada equipo ejecutando con el usuario adecuado: ssh-keygen -t rsa (pide un password, dejarlo en blanco)
  • En el equipo que va a ejecutar el script copiar la llave pública del otro:
    cd .ssh
    ssh-copy-id -i id_rsa.pub usuario@el_otro_equipo
Por lo general como quiero tener la posiblidad de ejecutar el script desde cualquier equipo intercambio llaves entre uno y otro.

Una vez se puede comprobar que se puede establecer una conexión ssh con el otro equipo:
ssh usuario@el_otro_equipo, sin necesidad de claves sabemos que todo está funcionando bien hasta aquí.

Lo demás es la parte fácil, decidir que vamos a sincronizar o respaldar :

#!/bin/bash
echo "sincronizando equipos"
rsync -ar -e ssh --delete usuario@el_otro_equipo:/usr/local/lib/site-python/ /usr/local/lib/site-python/

rsync -ar -e ssh --delete usuario@el_otro_equipo:/home/usurio/sistemas/ /home/usuario/sistemas/

rsync -ar -e ssh --delete usuario@el_otro_equipo:/home/usuario/AAA_TRABAJO/ /home/usuario/AAA_TRABAJO
/

Al final podemos automatizar la sincronización haciendo uso del CRON.

En Debian como en toda distribución de Linux encontramos el directorio /etc/cron.daily y otros más similares. Podemos copiar nuestro script en este directorio o hacer un link simbolico al mismo.

rsync solo transmite aquellos archivos que hayan cambiado.