epelpad

combinacion SSH + Cron + Rsync

combinacion SSH + Cron + Rsync

Una vez visto el uso y deshuso de SSH y cron (de manera muy rapida y resumida) queda la parte util de esas 2 herramientas combinadas con un maravillosos sistema de respaldos: rsync.

Que es Rsync

Rsync es un sistema de respaldos incrementales tipico en sistemas tipo Unix que se caracterisa por hacer respaldos incrementales minimizando el trafico de datos. Basicamente rsync no copiara todos los datos o arbol de directorios cada vez que sincronize sino que solo copiara los archivos modificados del origen conforme a su destino, hace esto mediante un algoritmo de sincronizacion de directorios. Estas transferencias o sincronizaciones se pueden realizar dentro del mismo disco duro (entre directorios locales) o entre dispositivos en red utilizando protocolos tcp/ip.

Hay varios modelos de respaldo de informacion, algunos complejos otros no tanto, para el caso de este respaldo y este ejemplo utilizo el respaldo incremental de informacion.

Como funciona Rsync.

Suponiendo que tiene un directorio fuente y lo quiere respaldar en el directorio destino, rsync funciona de manera muy facil:

rsync -a fuente/ destino/



Caso de aplicacion

Hay 2 servidores web para tareas diferentes: pilsen3 (xx.xx.xx.xx) es un servidor de subversion y de bugzilla y sera el servidor de respaldos (donde se piensa guardar la informacion), pilsen4(xx.xx.xx.xy) es un servidor de produccion donde se almacena una aplicacion web, sus bases de datos y archivos y arboles de directorios subidos por los usuarios, como estandar de este servidor es necesario tener respaldos constantes de la informacion(contiene la informacion a guardar), entonces lo que se procede a hacer es.

Antes que nada configuramos la autentificacion automatica por ssh entre Servidor datos y Servidor respaldos, esto con ssh-keygen


ssh-keygen
Enter file in which to save the key (/home/administrator/.ssh/id_rsa): [enter para valor default]
Enter passphrase (empty for no passphrase): [enter para valor default]
Enter same passphrase again: [enter para valor default]
Your identification has been saved in /home/administrator/.ssh/thishost-rsync-key.
Your public key has been saved in /home/administrator/.ssh/thishost-rsync-key.pub.
The key fingerprint is:
2e:28:d9:ec:85:21:e7:ff:73:df:2e:07:78:f0:d0:a0
[email protected]

Luego copiamos el archivo de la llave (key.pub) al host que queremos autorizar:


[email protected]:# ssh-copy-id ~/.ssh/id_rsa.pub xxx.xx.xx.xx

Esto con autentificacion automatica entre servidores.

Luego es configurar el script con rsync
Rsync por si solo puede ser agregado como comando al crontab, la unica razon de por que incluirlo en un script es por limpieza y aplicacion del respaldo ya que si los directorios o las politicas de respaldo cambian, todo se resume en un solo script de configuracion y no editar el crontab una y otra vez (centralizacion )

Mi script de backup es:

#!/bin/bash
#automated backup of "name" project from server xx.xx.xx.xy DO NOT TOUCH!!!
workingdir=/home/administrator/backup/
checkfile=/home/administrator/backup/checkfile.txt
if [ -d $checkfile ]; then
cat > $checkfile
else
touch $checkfile
fi
echo "backup is done! on" > $checkfile
date >> $checkfile
echo "files saved: " >> $checkfile
rsync -avz -e ssh [email protected]:/home/administrator/data /home/administrator/backup/ >> $checkfile
rsync -avz -e ssh [email protected]:/var/www/webapps /home/administrator/backup/
rsync -avz -e ssh --exclude "*.log" [email protected]:/opt/dataserver /home/administrator/backup/


Esto suponiendo que en el servidor xx.xx.xx.xx este configurado una tarea en cron donde se pueda hacer un backup de archivos config y asi no tener que andar siguiendo cientos de directorios de configuracion.

Ahora, rsync hace:

-a --archive  modo archivo, se refiere a que tratara los datos como modo archivo (con recursividad)
-v, --verbose Modo vervosidad, esto es que da salida de archivos copiados, util para manejar un log de backups
-z, --compress Utiliza un sistema de compresion (gzip) para reducir la transferencia de archivos, ojo: nada ams para la transsferencia, no guarda backups comprimidos (a menos que se exprese asi).
--exclude parametro donde se pueden exluir nombres y extensiones de archivos, asi como parametros y variables.

Por ultimo queda configurar el script en cron

Una vez visto el funcionamiento de cron, hay que tener en consideracion el tiempo de uso y trafico del servidor de trabajo (del cual vamos a hacer el backup), esto es hacer el respaldo en momentos de carga ligera o donde no se esten utilizando los archivos a respaldar.

Tambien hay que tener en cuenta la frecuencia de las actualizaciones (diaria, semanal, mensual, etc) y el espacio en disco disponible en el servidor de respaldos.

Mi script en crontab queda algo asi:

00 5 * * 0 /home/administrator/scripts/backup.sh >/dev/null 2>&1

Donde se hace un backup semanalmente los domingos a las 5 de la mañana.
(y se asegura la salida del comando para que no quede colgado el proceso).

Y asi queda la configuracion rsync+ssh (automatic login)+cron, fue una guia sencilla y preferi evitar tooodas las configuraciones de rsync (que en este caso no me servian) si quiere mas de rsync, pues:

Manpage de rsync
Manual extendido de rsync
Rsync wikipedia

8 comentarios - combinacion SSH + Cron + Rsync

Corrosive
Interesante, lo agrego a favoritos y te dejo mis 10 puntos
zajacik
Que buena combinación..
iberid2
sinceramente me ayudo mas que mucho estu tutorial... pero tengo una consulta
por ejemplo necesito backapear del equipo local al remoto pero sin que me pida contraseña. tengo un servido que se llama [email protected] y otro que es el [email protected] el comando para que ejecute cron es


0 */12 * * * /usr/bin/comando rsync -a home/servidores [email protected]:/mnt/NAS

por ejemplo yo puedo crear un usuario en el FreeNas para que en vez de poner [email protected] pongo "el nombre del usuario nuevo" asi cuando se ejecuta el cron no me pid la contraeña.
iberid2
[[email protected]] ~# ssh-keygen
Generating public/private rsa key pair.
Enter file in which to save the key (/root/.ssh/id_rsa):
Could not create directory '/root/.ssh'.
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
open /root/.ssh/id_rsa failed: No such file or directory.
Saving the key failed: /root/.ssh/id_rsa.
[[email protected]] ~#


cada ves que quiero crear la KEY me sale esto
jomarore
@iberid2 La respuesta la tienes en esta línea:
open /root/.ssh/id_rsa failed: No such file or directory.
Lo que te está diciendo es que no tienes el directorio creado, ejecuta el siguiente comando:
mkdir /root/.ssh

Con eso deberías solucionar el problema. Saludos y espero que te sirva.