Sincronizar carpetas entre servidores Linux (SSH)

Hoy ha surgido un temilla que requería sincronizar unas carpetas entre 2 servidores Linux, de forma automática cada hora, y como de costumbre, y para que no se me olvide, apunto por aquí los pasos.

Otra parte importante de este asunto es que quiero que la comunicación sea mediante ssh, para evitar miradas curiosas 🙂

Para sincronizar/copiar las carpetas vamos a utilizar rsync.

Para empezar necesitamos tener instalado rsync en nuestro servidor. Si no lo tenemos, lo podemos instalar fácilmente mediante:

# apt-get install rsync (# yum install rsync) dependiendo de la distro linux que tengamos.

Lo siguiente que vamos a hacer es configurar nuestros servidores para que se comuniquen mediante ssh y no nos pida contraseña, ya que quiero que el comando se ejecute automáticamente.

Creamos las claves privada/pública en el servidor2.

# ssh-keygen -tdsa

Copiamos la clave pública al servidor1

# cd /root/.ssh/
# cat id_dsa.pub | ssh root@servidor1 “cat >> /root/.ssh/authorized_keys”

Probamos que accedemos por ssh y no nos pide contraseña.

# ssh root@servidor1

Si todo es correcto hasta aquí, podemos pasar al siguiente paso, que es ejecutar realmente el rsync.

De las muchas opciones que tiene el comando rsync me voy a quedar con 4 que son suficientes para lo que quiero copiar. Estas opciones son:

  • -a para copiar directorios de forma recursiva, manteniendo privilegios, fecha de creación, permisos, etc.
  • -v para tener un mayor nivel de detalle de la sincronización.
  • -z para comprimir los datos y poder realizar una transferencia mas rápida.
  • -e ssh para ssh para copiar los archivos de un servidor a otro mediante una conexión ssh.

El comando lo ejecutaremos desde servidor2 y quedará de la siguiente manera:

# rsync -e ssh -avz root@servidor1:/ruta/carpeta/origen/ /ruta/carpeta/destino/

Si todo ha ido correctamente tendremos en la carpeta /ruta/carpeta/destino/ de servidor2 una réplica de la carpeta /ruta/carpeta/origen/ de servidor1.

Para finalizar, programaremos una tarea con cron para ejecutar el comando cada hora.

Ejecutamos

# crontab -e

y añadimos la linea

0 * * * * rsync -e ssh -avz root@servidor1:/ruta/carpeta/origen/ /ruta/carpeta/destino/ 2>&1 > /var/log/rsync-copia.log

Con esto, se ejecutará la tarea cada hora y nos dejará un log en /var/log/rsync-copia.log

 

Una página de las que he usado de referencia es:

http://www.esdebian.org/wiki/rsync-ssh-transporte-autenticacion-mediante-claves-sin-frase

Espero que os resulte de utilidad.

Print Friendly, PDF & Email

3 comments

  1. Hola Parece haber un error en esta linea

    # cat id_dsa.pub | ssh root@servidor1 “cat – >> /root/.ssh/authorized_keys”

    el cat – >> ( es sin el guion). cat >>

    Gracias por tu aporte !! estuvo muy bueno.!

    1. Hola Moises, muchas gracias por el comentario.
      Tenías razón y ya he corregido la línea. Supongo que fue un error al escribir y no lo vi 😉
      Saludos.

Deja un comentario

Uso de cookies

Este sitio web utiliza cookies para que usted tenga la mejor experiencia de usuario. Si continúa navegando está dando su consentimiento para la aceptación de las mencionadas cookies y la aceptación de nuestra política de cookies, pinche el enlace para mayor información.plugin cookies

ACEPTAR
Aviso de cookies
A %d blogueros les gusta esto: