Una de las cosas que más veces he tenido que hacer, dado que soy un forofo de la automatización, es poder entrar desde una máquina a otra de forma automática.

SSH
El protocolo SSH (Secure SHell) nos permite entrar en una máquina remota de forma segura (a diferencia de su hermano mayor, telnet) mediante una línea de comandos sobre una red no necesariamente segura.
Los datos que se envían y se reciben por medio de este protocolo se encriptan mediante un par de claves pública y privada, de manera que aunque alguien “esnife” nuestra red, no podrá interpretar qué comandos estamos lanzando ni qué resultados nos devuelve la máquina remota.
Para conectar desde una máquina
A
a otra máquina B
, necesitamos en A
un cliente de SSH y en B
un servicio de servidor de SSH. Si nuestros sistemas no traen de serie estas utilidades, deberíamos poder instralarlas mediante el correspondiente sistema de paquetes (openssh-client
y openssh-server
respectivamente).
Normalmente, accederemos a la máquina remota de forma interactiva, tecleando un usuario y una contraseña, de la misma manera que lo haríamos si utilizásemos una consola local en dicha máquina. Para ello, lógicamente, deberemos utilizar las credenciales de un usuario existente.
Automatización
Pero ¿qué pasa si lo que queremos es entrar de forma “no interactiva” en la máquina remota?. SSH nos obliga siempre a teclear al menos una contraseña, aunque podemos evitar teclear el usuario de la siguiente forma:
$ ssh usuario@maquinaremota
La única solución viable que tenemos es utilizar claves criptográficas en lugar de usuarios para acceder. El principio es el siguiente:
- En la máquina A nos creamos una pequeña infraestructura PKI con un par de claves: privada y pública.
- Compartimos con la máquina B nuestra clave pública.
- Accedemos de A a B encriptando ciertos datos por medio de nuestra clave privada.
- La máquina B intenta desencriptar mediante la clave pública que le proporcionamos inicialmente los datos que acabamos de encriptar por medio de nuestra clave privada.
- Si la desencriptación tiene éxito, se nos concede el acceso.
Secuencia
Esta forma de acceder mediante ssh está ampliamente documentada literalmente en miles de páginas de internet, pero de lo que se trata es de tener un pequeño “chuletario” rápido para tenerlo aquí para cuando nos haga falta.
La secuencia de comandos a utilizar, suponiendo que estamos en una máquina
A
y queremos acceder a otra máquina remota B
, es la siguiente:- Generar una pareja de claves criptográficas.
En la máquinaA
generamos un par de claves con el siguiente comando:$ ssh-keygen -t rsa
El comando tardará un rato en generar el par de claves y nos pedirá dos veces que especifiquemos una contraseña, que dejaremos en blanco (pulsando enter) ambas veces.
El parámetro -t especifica el tipo de encriptación que utilizaremos. Pueden ser otros como dsa, ecdsa, etc, pero lo más normal es utilizarrsa
.
Este comando nos va a crear en el directorio home del usuario actual (/home/usuario
en caso de un usuario normal o/root
en caso del usuario superadministrador) un directorio oculto de nombre.ssh
con el siguiente contenido:id_rsa id_rsa.pub
El primero es nuestra nueva clave privada, y el segundo la clave pública. Ambas claves criptográficas nos permiten cifrar con una y descifrar con la otra. - Copiar la clave pública.
Nuestra clave privada permanecerá siempre guardada en nuestra máquina A, pero la pública tenemos que trasladarla a la máquina de destino a la que querremos conectar.
Para ello, primero haremos lo siguiente:$ ssh usuarioB@maquinaB
Con esto estamos accediendo a la máquinaB
con el usuariousuarioB
de forma interactiva. Se nos pedirá la contraseña delusuarioB
y a continuación nos aseguraremos de que tenemos un directorio.ssh
en su home:$ mkdir .ssh $ chmod 700 .ssh $ exit
Una vez creado el directorio (hemos vuelto aA
con elexit
), copiamos nuestra clave pública concatenándola con lo que haya en el ficheroauthorized_keys
de dicho directorio deB
:$ cat id_rsa.pub | ssh usuarioB@maquinaB 'cat >> .ssh/authorized_keys'
Este fichero contendrá todas las claves públicas autorizadas a entrar en esta máquina y este usuario sin contraseña. - Entrar sin contraseña.
Una vez que hemos hecho lo anterior, ya podemos entrar desde A a B utilizando de nuevo el sigiuiente comando:$ ssh usuarioB@maquinaB
A partir de ahora ya no nos pedirá contraseña.
No hay comentarios:
Publicar un comentario