Skip to content

Instantly share code, notes, and snippets.

@dariodiaz
Forked from sposmen/rsync-ssh.md
Created August 29, 2012 18:34
Show Gist options
  • Save dariodiaz/3516783 to your computer and use it in GitHub Desktop.
Save dariodiaz/3516783 to your computer and use it in GitHub Desktop.
ssh: 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 basta con hacer un:
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