Hace ya algún tiempo compre una PC Mini-ITX para tenerla de servidor personal, en este momento esta guardando todos mis archivos, corriendo unos cuantos servicios y haciéndome la vida mas fácil, pero hoy siento que la pereza recorre mis venas de una manera potente y he decidido que haga los backups automaticamente con rsync mediante ssh, y para la suerte de aquel que esté leyendo le voy a explicar como hacerlo paso a paso =P, para el que no este leyendo, estoy seguro que se le va a quedar en la mente y algún día le va a servir de algo estos minutos que gastó en leerme.
Yo voy a estar sincronizando mis archivos multimedia mas que nada, pero esto sirve para poder hacer todo tipo de backups, configuraciones de sistema (/etc), logs, etc… . Para poder lograrlo vamos a precisar 3 cosas.
Primero antes de empezar a configurar, lo mejor es probar que el backup mediante rsync funciona, asegurarse de usar los usuarios correctos en cada una de las maquinas, el usuario correcto en la estacion en la que va a quedar el backup y en la maquina remota. Para mi caso, voy a estar creando un directorio “hola” en la maquina remota con otro archivo llamado hola, solo para comprobar que el rsync funciona.
jsanchez@backup:~$ rsync -avz -e ssh Jsanchez@10.0.0.3:/directorio/remoto /directorio/local/
Si, todo salio bien, un par de lineas fueron mostradas en la consola con los nombres de los directorios que usamos, y si son como yo, fueron directamente a fijarse que los directorios fueron copiados satifactoriamente. ¡Bien!, a seguir entonces. Si no lo lograron, el error puede estar que usaron el usuario incorrecto al hacer el ssh yo use “Jsanchez”, o es un sistema de permisos en cualquiera de los dos sistemas… O … no tienen el daemon sshd levantado en la maquina remota. Ouch! .
¡Perfecto!, lo siguiente es crear una clave para que la conección ssh no pida password cada vez que quiera hacer el backup, despues de todo no queremos estar a las 5:00 AM para poner el password cada vez que se corra el cron. Es un poco peligroso, lo se, pero considerando el password en texto plano en el script o esta opción, elijo esto (Se puede hacer que la conección, solo sea aceptada por esa maquina y nada mas).
Bien, entonces pasemos a generar la key para la maquina en la cual se va a guardar el backup. con el siguiente comando.
$ ssh-keygen -t rsa -b 2048 -f /donde/quieran/guardar/la/key/<Nombre de la llave>
Esta key tenemos que pasarla a la maquina remota para que la pueda usar, para eso, unicamente tenemos que pasar el archivo que termina en “.pub”, yo voy a usar scp. ATENCION: asegurarse que dentro de home de la maquina remota exista un directorio llamado “.ssh” , porque ahi es donde debemos dejar la llave que recien creamos, dentro de un archivo llamado “authorized_keys”. Hagamos lo siguiente:
$scp /donde/este/la/llave/<llave>.pub usuarioremoto@ip:/home/usuario/
$cat <llave.pub> >> /home/usuario/.ssh/authorized_keys
Una vez que hicimos esto, tenemos el entorno listo para correr nuestro rsync, antes debemos probarlo para verificar que todo funciona correctamente, con el siguiente comando.
$ rsync -avnz -e “ssh -i /maquina/backup/donde/hicimos/laLlave/<Llave sin el .pub>” usuarioremoto@hostremoto:/directorio/remoto/ /directorio/local/
En los argumentos del comando anterior, hay una -n, que significa que no haga la transferencia sino que unicamente nos muestre que es lo que hubiera transferido, sacarla para completar la transferencia.
ATENCION: Si ya tienen un directorio con archivos(como yo) no tienen porque volver a copiar todo de nuevo, si no que pueden poner –size-only en los argumentos para que no copie aquellos archivos que ya tenemos, unicamente los diferentes.
Si tienen alguna otra duda y saben ingles, aca les dejo la fuente vieja la cual use para esto. http://troy.jdmz.net/rsync/index.html