Skip to content

Instantly share code, notes, and snippets.

@sposmen
Last active October 23, 2020 08:15
Show Gist options
  • Save sposmen/3437523 to your computer and use it in GitHub Desktop.
Save sposmen/3437523 to your computer and use it in GitHub Desktop.
Rsync con ssh, o sea para que no pida contraseñas, es decir,con certificados

Realizar backups de manera facil con rsync y ssh Enviado por RazaMetaL el Mié, 2007-02-14 14:27. Tengo dos servidores, uno tiene un eggdrop que guarda el log de actividad de un canal en /home/bot/logs/canal. Hasta ahi todo esta muy bien, pero requiero que esos logs se publiquen en un sitio web que se encuentra en otro servidor.

La manera mas sencilla y practica que encontre para hacer esta tarea fue usando rsync para sincronizar los archivos de log desde un servidor a otro y que solo se copien los archivos nuevos o modificados.

Primero vamos a decidir las opciones para rsync, en mi caso y como lo explico en el parrafo anterior requiero copiar todos los archivos al nuevo servidor, despues que copie solo los nuevos archivos y/o los modificados. Todo esto lo logro pasando las opciones -avz y -e ssh a rsync.

-a para copiar recursivamente manteniendo privilegios, fecha de creacion, permisos, etc.; -v para incrementar el nivel de detalle de la operacion; -z para comprimir los datos, asi la transferencia es mas rapida; -e ssh para usar ssh para copiar los archivos de un servidor a otro.

Puedo usar tambien --delete-after para borrar los archivos que hayan sido borrados antes de realizar el backup en el servidor de logs.

Para ilustrar el ejemplo voy a asumir la siguiente configuracion:

Cita:

servidor de logs : 192.168.0.100 servidor web : 192.168.0.200 rsync lo voy a ejecutar con un cron en el servidor web Procedimiento: 1.- Instalamos rsync en el servidor web, en Debian(En caso de que no se encuentre instalado):

$ aptitude install rsync

2.- Ejecutamos rsync en 192.168.0.200:

$ rsync -e ssh -avzn bot@192.168.0.100:/home/bot/logs/canal /var/www/logs/canal/

Si todo esta bien tendremos un mensaje indicando los archivos recibidos, la cantidad de bytes y la velocidad de transferencia.

3.- Hasta aqui todo esta bien, pero si necesitamos hacer esto automaticamente cada hora mediante cron tenemos que lograr que ssh no nos pida contrasena. Para lograrlo realizamos el siguiente procedimiento:

Creamos una llave publica y una llave privada:

$ ssh-keygen -tdsa

Presionando solo enter en todas las preguntas que el comando anterior requiere vamos a tener nuestra llave publica en /home/usuario/.ssh/id_dsa.pub. Copiamos esta llave al servidor 192.168.0.100:

$ cd /home/usuario/.ssh/
$ cat id_dsa.pub | ssh bot@192.168.0.100 "cat - >> /home/bot/.ssh/authorized_keys"

Probamos que todo funcione haciendo:

$ ssh -l bot 192.168.0.100

Si no nos pide contrasena... podemos continuar con el siguiente paso.

4.- Ahora que 192.168.0.100 no nos pide contrasena podemos automatizar el proceso. Debemos ejecutar este comando en 192.168.0.200 como una tarea cada n cantidad de tiempo y desde luego podemos tener un registro de que archivos se van copiando:

$ crontab -e

Para ejecutar el backup cada hora agregamos en 192.168.0.200:

0 * * * * rsync -e ssh -avz bot@192.168.0.100:/home/bot/logs/canal /var/www/logs/canal/ 2>&1 > /var/log/rsync-backup.log
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment