jueves, 29 de junio de 2017

Generar claves para login automático mediante SSH

Una de esas cosas habituales y que te puedes ahorrar es meter la contraseña al establecer una sesión SSH en un nodo remoto. Para ello necesitamos generar una clave asimétrica y guardar la parte pública en el nodo remoto. En el ordenador local indicamos en un archivo de configuración que el cliente SSH use la clave privada y podremos conectarnos al nodo remoto sin necesidad de poner contraseña.
Esto tiene un riesgo y es que si un atacante se hace con nuestra clave privada entonces también puede acceder al nodo remoto mientras éste último siga guardando la clave pública, que permite autorizar las conexiones entrantes firmadas por la clave privada. El atacante tiene que hacerse pasar por nuestro ordenador de acceso (nombre del host, usuario) y tendrá autorización por parte del nodo remoto.
La clave privada se puede proteger con contraseña, pero entonces perdemos la comodidad buscada.

Los pasos a seguir son dos:
  1. Generar claves.
  2. Introducir clave pública en la lista de claves autorizadas del nodo remoto.
  3. Configurar nuestro ordenador para que use dicha clave automáticamente.

Generar claves

Para generar claves usamos el comando ssh-keygen. Nos pedirá introducir la ruta al archivo que guarde la clave privada. Generará un archivo de mismo nombre pero con extensión .pub que contendrá la parte pública de la clave SSH.

[user@host:~] ssh-keygen -t rsa
Generating public/private rsa key pair.
Enter file in which to save the key (/home/user/.ssh/id_rsa): /home/user/.ssh/remote_id_rsa
Enter passphrase (empty for no passphrase): 
Enter same passphrase again: 
Your identification has been saved in /home/user/.ssh/remote_id_rsa.
Your public key has been saved in /home/user/.ssh/remote_id_rsa.pub.
The key fingerprint is:
SHA256:bbb5fce0153ea1c78c8baa09d04fda38a31767ad0a24ded763fbf4a95918e94e user@host
The key's randomart image is:
+---[RSA 2048]----+
|                 |
|                 |
|                 |
|                 |
|   simbolitos    |
|                 |
|                 |
|                 |
|                 |
+----[SHA512]-----+ 

El resumen (hash) SHA256 tampoco se corresponde con ninguna clave que tenga en uso ;-)

Autorizar clave privada en el nodo remoto

Para autorizar la clave privada en el nodo remoto, enviaremos nuestra clave pública:
[user@host:~] cat .ssh/remote_id_rsa.pub | ssh admin@remote.local 'cat >> .ssh/authorized_keys'
admin@remote.local's password:

Añadir la configuración para que SSH use la nueva clave

En el archivo .ssh/config añadimos lo siguiente:
#Remote.local
Host remote.local
    HostName remote.local
    User admin
    IdentityFile ~/.ssh/remote_id_rsa

Previamente en el archivo /etc/hosts introduje la línea con la dirección IP del nodo remoto y los nombres remote y remote.local asignados a dicha IP:
XXX.XXX.XXX.XXX remote.local remote
Con un servidor de DNS se podría tener algo más elaborado. Si no le tienes asignado un nombre a la dirección IP del nodo remoto, puedes usar la misma dirección IP en el campo HostName y también en el de Host.

Todo listo


[user@host:~] ssh admin@remote.local
Welcome to Ubuntu 17.04 (GNU/Linux 4.10.0-24-generic x86_64)

 * Documentation:  https://help.ubuntu.com
 * Management:     https://landscape.canonical.com
 * Support:        https://ubuntu.com/advantage

 * How HBO's Silicon Valley built "Not Hotdog" with mobile TensorFlow,
   Keras & React Native on Ubuntu
   - https://ubu.one/HBOubu

Pueden actualizarse 0 paquetes.
0 actualizaciones son de seguridad.


Last login: Thu Jun 29 17:01:28 2017 from 83.51.216.64
admin@remote:~$

Otras opciones de SSH se pueden consultar en la página de manual correspondiente.

No hay comentarios:

Publicar un comentario