Origen(Data);

Crear una script de backup remoto automatizado por SSH

La ejecución de tareas de forma autónoma es importante para el funcionamiento de diversos servicios sin la intervención humanas, es importante que las tareas se lleven a cabo en servicios que tienen siempre solicitudes, una de esas puede ser la disponibilidad de tener siempre un servidor de respaldo, donde puedas transferir y mantener actualizado tus documentos en un equipo remoto.

Respaldo de un localhost a un servidor SSH

Para esta práctica he elaborado el siguiente escenario en el que un sistema cliente mantiene en sincronía un directorio propio hacia otro ordenador remoto que sería el servidor, he decidido que para el medio de transferencia sea por SSH, cada ves que se almacene o se actualice un archivo en el directorio del sistema cliente se actualizaran los nuevo cambios en el servidor, los requisitos previos  que tienes que tener para llevar a cabo está práctica es tener:

  • OS Fedora 32 (Cliente localhost /home/user)
  • OS Debían 10 (Servidor SSH 192.168.1.100 /home/cristian)
  • rsync (Transferencia de archivos)
  • Cron (Administrador regular de procesos en segundo plano)
  • sshpass (Utilidad de autenticación SSH no interactiva)

Claro que si quieres puedes escoger tu propia distribución Linux no estas forzado a ello pero los paquetes sshpass, cron si son necesarios tenerlos instalados en el sistema cliente y el paquete rsync tiene que estar instalado tanto en la maquina cliente como en el servidor, por eso escogí esas dos distribuciones porque ya tiene instalados esos paquetes, sabiendo esto es momento de designar el directorio al cual se hará el respaldo:

/home/user/Documentos/
├── 001.pdf
├── 002.pdf
├── 003.pdf
├── 004.pdf
├── 005.pdf
├── 006.pdf
├── 007.pdf
├── 008.pdf
├── 009.pdf
├── 010.pdf
├── 011.pdf
├── 012.PDF
├── photo-1.jpg
├── photo-2.jpeg
├── photo-3.jpg
└── photo-4.jpg

0 directories, 16 files

Disponemos de generar un script en el localhost que es el que realizara la tarea de respaldos, lo puedes guardar con el nombre que prefieran en esta practica se designo el nombre de remote-backup.sh.

#!/bin/bash
find '/home/user/Documentos' -name '*.pdf' | xargs -i sshpass -p 'passwordServer' rsync -arv {} -e ssh cristian@192.168.1.100:~/Backup

Vemos que en el script se asigna el directorio donde solo se buscará los archivos con formato PDF y serán enviados al servidor, se usa el parámetro -p en la herramienta sshpass para asignar la contraseña del servidor. Para ejecutar el script cada 5 minutos usaremos el deamon Cron con su herramienta crontab, para eso en la misma máquina cliente escribimos la siguiente instrucción

$ crontab -e

Se abrirá el archivo de Cron donde podemos crear tareas en segundo plano, en esta práctica solo haremos lo que se muestra en la siguiente imagen

Aquí se indica que cada 5 minutos (*/5) será ejecutado el script para realizar backups. Verificamos que se haya hecho el respaldo dirigiéndonos a la carpeta Backup del servidor.

Cómo observamos los archivos con formato PDF fueron correctamente respaldados, y así será con cada archivo PDF que sea agregado.

Si quieres mantener la contraseña un poco mas protegida y no comprometerla dentro del script puedes optar por cifrarla con GPG, para eso puedes crear un archivo

$ echo 'passwordServer' > sshpasswd

El archivo creado sshpassd vamos a cifrarlo de la siguiente manera:

$ gpg -c sshpasswd

Nos generara un archivo con el mismo nombre pero con extensión gpg, así que debemos borrar el archivo original.

Ahora modificaremos nuestro script remote-backup.sh de la siguiente manera:

#!/bin/bash
gpg -d -q sshpasswd.gpg > /tmp/filepasswd;
find '/home/user/Documentos' -name '*.pdf' | xargs -i sshpass -f /tmp/filepasswd rsync -arv {} -e ssh cristian@192.168.1.100:~/Backup;
shred -n 10 -uz /tmp/filepasswd

Podemos ver que la segunda linea desencripta el archivo gpg en una carpeta temporal, también hubo un cambio en la tercera linea con el uso de sshpass, el parámetro -p donde tenias que poner la contraseña directamente se cambio por el parámetro -f donde asignas el archivo que con tiene la contraseña temporalmente desencripta en la carpeta /tmp y después de realizar la tarea de backup el mismo script finaliza borrando el archivo temporal con la herramienta shred.

Cover Photo by panumas nikhomkhai from Pexels

Licencia Creative Commons

Esta obra está bajo una Licencia Creative Commons Atribución 4.0 Internacional.

Licencia Creative Commons

Descubre cómo puedes contribuir a mi blog con donaciones. Tus recompensas me ayudan a seguir creando contenido valioso para la comunidad. Con tan solo un par de clics, puedes marcar la diferencia y apoyarme. ¡Apoya ahora!. 🚀🔥

3 respuestas a “Crear una script de backup remoto automatizado por SSH”

  1. Avatar de Elvis Rodriguez
    Elvis Rodriguez

    Buenas noches quiero hacer lo mismo pero de una maquina linux a maquina con windows find ‘/home/user/Documentos’ -name ‘*.pdf’ | xargs -i sshpass -p ‘passwordServer’ rsync -arv {} -e ssh cristian@192.168.1.100:E:\Respaldo y no usar find sino que quiero copiar archivos de una ruta ejemplo /home/user/Documentos

    Me gusta

  2. muy interesante … una oregunta tengo dos vps y quiero hacer backup en mi pc (tiene windows) como se hace.. gracias

    Me gusta

    1. Saludos, si lo que quieres es mandar el respaldo a tu pc con windows, tendrías que montarlo como servidor SSH y tu VPS seria el cliente, haciendo eso y siguiendo el post debería funcionar

      Me gusta

Deja un comentario

Crea una web o blog en WordPress.com