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