Skip to content

Backups con scp

bittor7x0 edited this page Apr 6, 2021 · 4 revisions

Backups automáticos con scp

Nuestro firmware VDR puede ser usado como "Agente Backup" y hacer una copia de seguridad, de forma automática, de los datos de un determinado directorio de un servidor remoto, al disco duro conectado en nuestro giga.

Que un equipo de TDT se pueda usar para estos menesteres, particularmente me parece un tema, como mínimo, curioso y más cuando todo se consigue con conexiones seguras del tipo ssh y scp que se pueden usar con "absoluta" seguridad, incluso a través de internet.

Creación de los ficheros de claves pública y privada

El primer paso para lograr una tarea automatizada y poder hacer la copia de seguridad en nuestro disco, es conseguir que la comunicación con el servidor remoto no pida contraseña, de esta manera, con un simple script, se puede lanzar todo de forma automática para dejarlo ejecutándose y despreocuparse del tema.

Para conseguir que no nos pida la contraseña hay que generar un par de ficheros de claves, uno con las privadas que se quedarán en nuestro giga y otro con las públicas que las copiaremos en los servidores a los que queramos conectar. Ambos ficheros sirven para autentificar la conexión entre nuestro giga y los servidores (a modo de contraseña automática).

El procedimiento para dejar preparado tanto el servidor como nuesto giga es el siguiente:

1.- Tenemos que generar el fichero de clave privada (que incluirá también la clave pública). La instrucción a ejecutar, mediante telnet desde nuestro giga es:

dropbearkey -s 4096 -f /root/.ssh/id_rsa_4096

El fichero que generamos se llama id_rsa_4096 y se habrá creado en el directorio /root/.ssh/
Este fichero tarda unos 5 minutos en generarse. Si queremos que la generación sea más rápida, podemos eliminar la parte "-s 4096" de la órden, aunque el nivel de seguridad será más bajo (por defecto 1024 bits -creo-) y probablemente sea suficiente.

2.- Generar el fichero con la clave pública que se copiará en el directorio .ssh del usuario al que se conecte del servidor remoto:

dropbearkey -y -f /root/.ssh/id_rsa_4096 | grep "^ssh-rsa " >> /root/.ssh/authorized_keys_4096

Este fichero se habrá creado en el mismo directorio que el anterior.

3.- Cambiamos los permisos del fichero.

chmod 600 /root/.ssh/authorized_keys_4096

4.- Copiamos la clave pública al servidor remoto, al .ssh del usuario.

scp -P puertod_ssh_servidor_remoto /root/.ssh/authorized_keys_4096 usuario_servidor_remoto@ip_servidor_remoto:.ssh/authorized_keys

Lo único que hacemos con esta órden es copiar en el directorio .ssh del usuario del servidor remoto, el fichero que permitirá identificar a nuestro giga cuando se conecte.

puertod_ssh_servidor_remoto --> Es el puerto de escucha del servidor remoto. Habrá que ponerlo si es diferente al que tiene por defecto, que es el 22.
usuario_servidor_remoto --> El nombre de usuario que utilizamos para conectarnos al servidor remoto.
ip_servidor_remoto --> La dirección ip del servidor remoto.

5.- Hacemos una conexión prueba, indicando el fichero de clave privada en la instrucción de conexión para que el servidor remoto no pida contraseña.
La primera conexión nos pedirá si queremos confiar en el servidor al que se conecta y habrá que aceptar (automáticamente nos aparecerá en /root/.ssh/ un fichero llamado known_hosts), aunque es probable que esta solicitud ya nos haya aparecido al ejecutar la instrucción del punto 4. La orden es:

ssh -p puertod_ssh_servidor_remoto usuario_servidor_remoto@ip_servidor_remoto -i /root/.ssh/id_rsa_4096

A partir de este momento ya podemos crear un pequeño script ejecutable desde el giga, bien por telnet, con el explorador de archivos o mediante una tarea del programador de tareas.

Script de automatización

El script puede llamarse "copia_seguridad.sh" y tener esta forma:

#!/bin/ash
export HOME=/root
date > /media/vdr1/copia_seguridad_servidor/ultima_copia.log
scp -P puertod_ssh_servidor_remoto -i /root/.ssh/id_rsa_4096 usuario_servidor_remoto@ip_servidor_remoto:/directorio_del_servidor_remoto/* /media/vdr1/copia_seguridad_servidor/
date >> /media/vdr1/copia_seguridad_servidor/ultima_copia.log
exit 0

El script hace que el giga se conecte al servidor remoto y descarge sobre nuestra carpeta de grabaciones en el directorio "copia_seguridad_servidor" todo el contenido del directorio "directorio_del_servidor_remoto" del servidor al que nos conectamos. Y todo ello sin pedir contraseña ni ninguna otra validación.

El fichero /media/vdr1/copia_seguridad_servidor/ultima_copia.log nos indicará el inicio y el final de la copia, por lo que sabremos el tiempo que tarda en realizarse la misma.

Para ejecutar el script únicamente tendremos que conectar por telnet, situarnos en el directorio donde hayamos guardado el mismo y ejecutar:

ash copia_seguridad.sh &

El símbolo "&" del final de la orden de ejecución es para que se ejecute en segundo plano, por lo que podremos cerrar nuestra ventana de telnet y apagar nuestro ordenador estando seguros de que se está realizando la copia.

También se puede ejecutar el script desde el filebrowser o desde el programador de tareas, por lo que es muy sencillo programar una tarea que se ejecute todos los días por la noche y tener así actualizados diariamente todos los datos que queramos.

Lo ideal es que en el servidor remoto tengamos comprimidos los datos que queramos descargar con el script, así la transmisión será mucho más rápida.

Por cierto, también podemos hacer una copia en sentido inverso, es decir desde nuestro giga o disco duro conectado al mismo hasta el servidor remoto, la instrucción de copia es similar pero modificando el orden del origen y destino de datos:

scp -P puertod_ssh_servidor_remoto -i /root/.ssh/id_rsa_4096 /media/vdr1/directorio_a_copiar/* usuario_servidor_remoto@ip_servidor_remoto:/directorio_del_servidor_remoto/