Acceso remoto por SSH sin contraseñas

En esta ocasión me ha surgido la necesidad de tener que acceder a un servidor para almacenar en él los archivos de la copia de seguridad de otro servidor. Ya sabéis: si tenéis un equipo, hacéis copia de seguridad y la guardáis en ese mismo servidor, cuando falle, perderéis el servidor y las copias… Lo mejor es hacer las copias y enviarlas a otra parte. Para ello usaré rsync, que permite el envío de ficheros de forma segura usando un túnel SSH.

El motivo de esta entrada es que quiero automatizar al máximo el proceso, y que no se me pida la contraseña del servidor que hará de almacén de las copias cada vez que se ejecute el script de backup. De esta forma podemos programar la tarea de backup con cron, y que se haga siempre sin ninguna supervisión ni interacción.

La receta es muy fácil: básicamente lo que haremos es usar generar un clave pública en el servidor que enviará la copia, una clave privada para cifrar la comunicación, y le diremos al servidor destino, que cuando se use ese par de claves, se mapee el acceso a un usuario concreto (típicamente un usuario muy limitado, con accesos muy restringidos, y que solo pueda guardar archivos en la carpeta de backups). Vamos a ello.

Lo primero es generar el par de claves en el servidor origen de los archivos. Para ello usamos el comando ssh-keygen:

Le decimos que por defecto genere los archivos en la ruta por defecto, en /root/.ssh/id_rsa (clave privada) y en /root/.ssh/id_rsa.pub (clave pública). Es importante que no le pongamos passphrase porque si lo hacemos, cada vez que se intente acceder al servidor destino, nos preguntará la passphrase, y no podremos crear tareas totalmente automatizadas en cron, que usen este par de claves.

Ahora nos queda enviar la clave pública al otro servidor, e indicarle a qué usuario del servidor de destino se asociará. Lo hacemos con el siguiente comando:

Pues ya lo tenemos. No hay más. Podéis probar que al ejecutar el siguiente comando se accede directamente al servidor de destino sin solicitar ninguna contraseña

Ahora es cuando viene la parte realmente interesante. ¿Cómo hacemos para copiar los archivos de uno a otro servidor usando el túnel SSH?. Pues facilísimo, usando rsync de la siguiente forma en el servidor origen de los archivos:

Con ese comando copiamos los archivos de /root/local_backup del servidor jdomo a la carpeta /mnt/Data/backups del servidor 192.168.3.35 en la que el usuario jdomo tiene permisos de escritura.

Ahora solo nos queda programar nuestra tarea en el crontab, se ejecutará sin problemas cada vez y se transferirán los datos de forma segura a través de Internet. Este mismo sistema sirve para ejecutar cualquier tipo de comandos de forma remota y sin contraseñas, no solo para copiar archivos 🙂

 

Espero que os haya gustado.

Añadir un comentario

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.