Sincronizar y/o Respaldar directorios con SSH y RSYNC

Es muy probable que se requiera replicar la información de un directorio de una máquina o servidor a otro en mi red local o en Internet. Con RSYNC podríamos hacer cosas simples como sacar respaldos incrementales a un disco duro externo, a otra máquina en la red. También nos sirve para sincronizar directorios a través del Internet y tener mirrors de un sitio web distribuidos en la red. Esto es lo que hacemos para los repositorios de Elastix y lo que hace Wikileaks con sus cientos de mirrors.

Si bien RSYNC no necesita de SSH para sincronizar, utilizar los 2 en conjunto tiene algunas ventajas entre las que destaco algunas:

  • La información viaja encriptada
  • No necesito correr un servidor RSYNC
  • Solo necesito preocuparme de tener abierto el puerto de SSH

Nota: todos los ejemplos son una sola línea

Ejemplo 1: Sincronizar 2 servidores web

rsync -avz --delete  -e ssh /var/www/sitioweb usuario@servidorremoto.com:/var/www/mirror

Las opciones quieren decir:

  • -a Sirve para hacer una sincronización recursiva
  • -v Sirve para mostrar en pantalla información de lo que esta haciendo el proceso
  • -z Sirve para enviar la información comprimida y ahorrrar ancho de banda
  • –delete Sirve para borrar del destino todo lo que no esta en el origen. En otras palabras para tener un mirror 100% igual.
  • -e ssh: Es la parte del comando que hace que este artículo sea catalogado como un tip ssh ;). Básicamente sirve para hacer la sincronización utilizando el protocolo ssh

Al igual que SCP el primer directorio es el origen y el segundo es el destino.

Ejemplo 2: Sincronizar con puerto  no Estandard

Algo muy común es que la gente  corra el servidor SSH en un puerto distinto al 22. Inclusive hace unos días publiqué como hacer para que escuche en el puerto 443. Ahora explicamos como sincronizar los 2 directorios donde el puerto del destino no es estandard.

rsync -avz –delete –rsh=’ssh -p 443′ /var/www/sitioweb usuario@servidorremoto.com:/var/www/mirror

Como pueden ver hay un solo cambio en este ejemplo. En lugar de usar -e ssh utilizamos-rsh=’ssh -p 443′. Básicamente estamos diciendo que se utilice el puerto 443 en lugar del puerto 22.

Recomendaciones

Si desean hacer tareas automatizadas como usar su servidor como un mirror de un tercer (ej. Elastix, Wikileaks 😉 ) es muy recomendable crear un ambiente enjaulado para ese usuario SSH y seguro necesitará trabajar con autenticación con llaves públicas y privadas.

Artículos relacionados

  • No existen artículos relacionados

Publicado por

Rafael Bonifaz

#SoftwareLibre #criptografía y #privacidad

5 comentarios en «Sincronizar y/o Respaldar directorios con SSH y RSYNC»

  1. Rafa, me parece que no necesitas especificar que tu shell es ssh. Me llamó la atención tu post porque nunca había tenido que hacer eso para hacer rsync cifrado. Revisando el man veo que cuando usas : usas un remote shell, lo cual es lo esperado. Y al menos en Debian rsh se va a ssh. Lo que sí es útil es usarlo para especificar un puerto (aunque eso lo puedes tener en el config) y leo que comentas sobre un hecho, donde la gente usualmente pone a correr en otros puertos SSH, esto se debe a que los scans de puertos buscan el TCP 22 de forma preferencial; cambiarlo de puerto no ayudará en caso de un ataque, quizás quieras en un próximo post hablar de fail2ban que es bien popular para prevenir estos problemas.

  2. Muy de acuerdo en que cambiar el puerto nos da una falsa seguridad. No nos protege de quien nos quiere hacer daño.

    Sobre lo de Fail2Ban, buena idea voy a seguir tu recomendación 😉

    Saludos,

    Rafael

  3. Hola,

    interesante tu post.

    He estado haciendo pruebas y lo que no me funciona es al copiar un fichero en el directorio local.

    Después de lanzar el rsync, en vez de copiar el fichero nuevo local al servidor, lo que hace es borrarlo del directorio local por no existir en el servidor.

    ¿Hay alguna manera de que sincronice también desde local?.

    Saludos.

  4. Rafael.

    Tengo un servidor con musica y otros tienen que ir por nueva musica, todo lo tengo funcionando bien con crones y los pcs en su horario llegan y miran si hay musica nueva y se lleva lo que no tienen.

    Ahora lo que deseo es que una vez terminen me envie un correo informando, actualmente lo tengo asi.

    Si no tiene conexion con el servidor envia correo diciendo que fallo la copia, pero al tener conexion ingresa e inicia la transmisión pero aunque no termine me llega el correo con el log de lo que ha copiado pero requiero que llegue correo solo si los archivos del origen y destino sean iguales ya sea por tamaño o lista de archivos.

    Te agradezco la ayuda

Deja una respuesta

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

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.