rsync con certificado

Seguramente la herramienta más utilizada que hay hoy en día para hacer copias de seguridad sea “rsync“, si resulta que las copias son entre servidores remotos, pues su compeñero ideal será “ssh“.

Las opciones de “rsync” que necesitaría si quiero que se copien todos los archivos y una vez copiados se vaya actualizando con los nuevos archivos o los modificados:

  • -r: Aplica recursividad al origen de la copia. Se lleva los archivos y directorios que están dentro de la ruta que marquemos como origen.
  • -u: Modo de actualización, tan sólo se lleva los archivos que sean más nuevos en el origen que en el destino.
  • -o -g: Transfiere la propiedad de usuario (-o) y grupo (-g). Esto se aplica a los números de UID, no al nombre de usuario concreto. Si en nuestro origen el usuario con UID 3333 es usuario1 y en el destino el UID 3333 corresponde a usuario 2, habrá un problema de permisos ya que usuario 2 de repente pasará a tener control sobre esos datos.
  • -X: Transferir atributos extendidos que tengan aplicados los archivos
  • -p: Transfiere los permisos del archivo (diferente a la propiedad del mismo)
  • -t:Conserva las fechas de modificación, haciendo que rsync marque en el destino la misma fecha de modificación que tenía el archivo en origen.
  • -l: Conserva los enlaces simbólicos copiándolos como tales y apuntando al mismo destino, exista o no.
  • -D: Copia dispositivos especiales
  • -S: Manejar archivos dispersos de forma eficiente, de tal manera que si tenemos un archivo que tiene marcados 4GB como tamaño pero solo usa 100MB, lo transfiera con mayor efectividad.
  • -x: No cruzar filesystems. Es útil cuando tenemos un punto de montaje dentro de nuestro origen y no queremos llevarnos su contenido.
  • –remove-source-files: Elimina los archivos del ORIGEN una vez copiados. Interesante a la hora de archivados.
  • –delete: Borrará los archivos que haya en DESTINO y que no estén en origen. Útil para mantener una copia exacta 1:1 del origen
  • -z: Aplica compresión a los datos durante la transferencia. Muy útil si se transfieren logs.
  • –progress: Mostrará información del archivo que se está transfiriendo, así como del tiempo que se espera que tardará la transferencia en terminar. Si no hay cambios en los archivos, –progress no mostrará nada.
  • -e: Permite especificar opciones al comando que usaremos de shell remota. Por ejemplo, si tenemos el servidor ssh remoto en el puerto 1234, ejecutaremos: rsync -e “ssh -p 1234” -otrasopciones origen destino
  • -a: Esta es una metaopción, que activa de golpe las opciones -rlptgoD.
  • -W: Esta opción activa la copia completa de los archivos, para que no haya que dedicar tiempo a calcular los diferenciales.
  • -c: Esta opción desactiva la comprobación de checksum de datos, es decir, solo utiliza fecha de modificación y tamaño para determinar si un archivo se transfiere o no.
  • -avz

luego si queremos usar “ssh” lo haremos con la opción:

  • e: “-e ssh

si lo que queremos es una copia exacta usaremos:

  • –delete-after: que eliminaría en e lservidor 2, los archivos eliminados antes de hacer la copia del servidor 1.

La idea ahora sería poner en el servidor 2 un cron que copie los archivos del servidor 1.

$ rsync -e shh -avz usuario1@ip-servidor1:/directorio/servidor1 /directorio/servidor2

Este comando evidentemente nos pedirá la contraseña por lo que para poner en un cron, no nos sirve, para solucionar esto tenemos dos posibilidades:

  • utilizar la aplicación sshpass dentro de rsync.
    • sshpass -p 'elpassword' rsync --progress -avz -e ssh usuario1@ipservidor1:/servidor1/directorio/* /servidor2/directorio
  • o utilizar llaves públicas y llaves privadas.

En el servidor 2 vamos a crear las claves:

$ ssh-keygen -tdsa

A todas las preguntas las dejamos en blanco, esto genera id_dsa.pub en el directorio oculto /home/admin/.ssh/ la clave pública que copiaremos en el servidor1

Para ello simplemente:

 ssh-copy-id root@<ip-del-que-se-quiere-conectar>

 


Comentarios 0