martes, 1 de marzo de 2016

SSH: conexión desatendida entre hosts

Quiero resumir aquí lo necesario para realizar la configuración que permite la conexión desatendida del usuario userA desde el hostA hasta la cuenta del userB del hostB.

La base del mecanismo es la criptografía asimétrica. En el ejemplo vamos a emplear cifrado RSA, pero podíamos haber escogido "cifrado DSA". El resultado es equivalente.

La criptografía asimétrica requiere de un par de claves: la pública y la privada. Un mensaje cifrado con una de ellas solo puede ser descifrado con la otra. En este sencillo mecanismo nos apoyamos para:

  • Demostrar que somos quienes somos: porque lo que nos dicen cifrado con la clave pública lo entendemos porque tenemos la privada.
  • Mantener la privacidad del canal puesto que nadie puede suplantar el extremo que posee la clave privada. Para evitar que suplanten al otro extremo, al inicio de la sesión se intercambia un secreto que permitirá cifrar las comunicaciones, ya con criptografía simétrica.


Generamos la pareja de claves
Ten en cuenta que la pareja de claves podría existir antes ya. Sigue leyendo el post y cuando lo entiendas todo, comprueba el contenido del directorio $HOME/.ssh por ver si te puedes saltar el paso de la generación.

(host A) user A # ssh-keygen -t rsa 
Generating public/private rsa key pair.
Enter file in which to save the key (/root/.ssh/id_rsa): 
Enter passphrase (empty for no passphrase): 
Enter same passphrase again: 
Your identification has been saved in /root/.ssh/id_rsa.
Your public key has been saved in /root/.ssh/id_rsa.pub.
The key fingerprint is:
a7:34:ee:dd:cc:bb:aa:99:88:77:66:55:44:33:22:11 root@muchotest.com
The key's randomart image is:
+--[ RSA 2048]----+
|        ..=+ ..o.|
|         1 3+ +..|
|          == - = |
|         . .. e .|
|        S .  o o |
|       . +    *  |
|        .    o   |
|                 |
|                 |
+-----------------+


Si entras en el .ssh del HOME del usuario que quiere hacer las conexiones desatendidas encontrarás los 2 nuevos ficheros:
  • id_rsa.pub: puede ser enviado a cualquier host o persona que lo solicite. Es la parte pública de la pareja de claves asimétricas.
  • id_rsa: NUNCA debe salir del lugar seguro donde se supone que se ha generado. NUNCA. Es la parte privada de la clave asimétrica. Cualquiera que tenga este fichero puede suplantar la identidad del host o el usuario al que pertenece.


Habilitamos la clave en el hostB

Lo normal es que los dos hosts sean de nuestra propiedad o ámbito de gestión. Copiamos el id_rsa.pub con un scp o copy-paste por el terminal.

Para seguir con el ejemplo, vamos a suponer que ya se ha copiado el fichero id_rsa.pub en el $HOME del receptor.

(hostB) userB # cat $HOME/id_rsa.pub >> $HOME/.ssh/authorized_keys
(hostB) userB # chmod 400 $HOME/.ssh/authorized_keys


El tema de los permisos es importantísimo, por eso los aseguramos en la segunda línea. Si el fichero $HOME/.ssh/authorized_keys no existe se creará con unos permisos por defecto que pueden no ser "400". Debemos asegurarnos de que los permisos del fichero son esos porque si no va a parecer que no lo hemos hecho bien ya que no funcionará y tampoco habrá un mensaje de error claro de ello.


Probamos

La prueba es hacer un ssh desde el userA del hostA hasta el userB del hostB. Es posible que nos pida confirmación para guardar el certificado del host e incluso de userB. Solo debe ocurrir la primera vez. Lo que nunca debe ocurrir es que nos pida la contraseña.

Lo que hemos hecho solo sirve en el sentido de A hacia B. Si queremos los 2 sentidos hay que intercambiar la clave pública de B.


No hay comentarios: