Backups remotos con rsync a través de ssh sin contraseña

“Si la copia de seguridad se hace, y además está correcta, en el momento que sea necesario hacer uso de ella fallará el soporte donde se haya hecho”

Lo dice una ley de Murphy, y efectivamente, me ha pasado… Y como de sabios es rectificar (depurar, que diría un servidor), aquí tenemos esta entrada en el blog.

En una entrada anterior vimos como hacer un backup de las partes que nos interesaran de un sistema (ver aquí), y al final dejaba como posibilidad el poder enviar los backups a un servidor SFTP o similar. Pues en esta entrada vamos a ver como hacerlo.

Tenemos dos sistemas, el Cliente, del que queremos hacer la copia de seguridad, y enviarla de forma segura y automática al Servidor. Una herramienta muy útil para esto es rsync, ya que nos compara los ficheros en origen y en destino y solo envía los cambios hacia el destino, con los ahorros de ancho de banda que ello implica. En la entrada que os comentaba arriba, veíamos como hacer copia de todo el sistema a nivel de sistema de archivos (dispositivo de bloques), como la copia es semanal, los cambios son mínimos (base de datos, gráficas de cacti, logs y poco más) por tanto rsync se ajusta bastante a lo que necesitamos.

Vamos a ello.

Lo primero que necesitamos hacer es crear un usuario en nuestro Servidor (equipo que recibirá las copias a través de rsync/SSH), ya que después lo usaremos para logearnos desde el equipo Cliente y enviar la información (no conviene usar el usuario root, por motivos obvios de seguridad). Luego crearemos las carpetas donde ese usuario tendrá permiso de escritura, y finalmente crearemos el certificado (clave pública y clave privada, en realidad el cliente usará la clave privada para acceder al servidor y éste la clave pública para verificarla) con el que ese usuario se podrá logear en el Servidor, desde el Cliente, a través de SSH:

clienteservidor

En el Servidor

Ya tenemos el usuario creado, y las carpetas donde almacenaremos los datos que recibamos, con los permisos oportunos dados.

En el Cliente

Una vez creado el usuario en el Servidor, podemos comprobar que el acceso desde el Cliente funciona correctamente, usando la contraseña que le hayamos puesto al usuario jdomo:

Para poder automatizar el envío de ficheros a través de rsync y ssh necesitamos decirle a nuestro Servidor que con determinado certificado (que crearemos a continuación), vamos a permitir loguearse al usuario jdomo en el sistema, sin necesidad de usar contraseña (en su lugar usará un certificado). Vamos a crearlo, y cuando nos pregunte la passphrase debemos dejarla en blanco (muy importante, si no, al usarlo nos la preguntará, y no es lo que queremos):

Ahora solo tenemos que acceder al servidor usando la clave privada (archivo que no acaba en .pub) que nos acaba de generar, y ¡listo!:

Con todo esto ya tenemos el login automático del usuario jdomo preparado, solo nos queda enviar los archivos mediante algún comando desde el cliente hacia el servidor, y vivir más tranquilos, sabiendo que tenemos nuestra copia en dos lugares distintos (por si las moscas…).

Enviando nuestro backup con rsync de forma segura

Uno de los modos de envío de ficheros de rsync es a través de un túnel ssh. Suponiendo que tenemos en nuestro equipo Cliente, los archivos de imagen del sistema de archivos en /mnt/Data/backup/img, podemos enviarlos de forma segura mediante el siguiente comando rsync:

Si comparamos con una copia completa normal, con scp, tenemos que la primera copia con rsync y scp tardan más o menos lo mismo, pero las siguientes (si los ficheros originales no varían), con rsync es instantánea, pero con scp no (tarda lo mismo que si no estuvieran los archivos en destino).

Tan solo nos queda insertar el comando rsync anterior en un archivo, darle permisos de ejecución y ponerlo dentro de /etc/cron.daily para que se ejecute cada día. Si ejecutamos el envío de los archivos al servidor con rsync cada día, pero los archivos los generamos una vez a la semana, nos aseguramos de que se hacen 7 intentos de envío de los archivos entre copia semanal y copia semanal. No esta mal pensado ya que la conexión puede fallar por mil motivos (se corta la conexión de internet, el servidor y el cliente no están activos a la vez, …), y si se hacen varios intentos de copia, si la primera se completa, las siguientes no tardarán nada, ya que los archivos ya estarán en destino (y no se consumirá casi ancho de banda).

Y con esto, ya tenemos el sistema un poco más seguro… o no… jajajajaaaa 🙂

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *