Escribe tu búsqueda

SSH y los “host conocidos” en macOS

Compartir

Una de las cosas que sueles recibir la primera vez que te conectas a un servidor por SSH es el aviso de que la autenticidad del host no puede ser verificada. El usuario puede aceptar la llave RSA que ofrece el servidor para convertir ese servidor en fiable ya que si no, cada vez que intentáramos conectarnos al mismo recibiríamos el mismo mensaje.

El problema es cuando, con la misma IP, el hardware de un servidor cambia y se recibe un mensaje terrible que implica un ataque “man-in-the-middle” … pero vayamos por partes.

las claves RSA

En criptografía, RSA es un sistema criptográfico de clave pública desarrollado en 1977 por ingenieros estadounidenses. En la actualidad, RSA es el primer y más utilizado algoritmo de este tipo y es válido tanto para cifrar como para firmar digitalmente.

La seguridad de este algoritmo radica en el problema de la factorización de números enteros. Los mensajes enviados se representan mediante números, y el funcionamiento se basa en el producto, conocido, de dos números primos grandes elegidos al azar y mantenidos en secreto. Actualmente estos primos son del orden de 10 elevado a 200, y se prevé que su tamaño aumente con el aumento de la capacidad de cálculo de los ordenadores.

Como en todo sistema de clave pública, cada usuario posee dos claves de cifrado: una pública y otra privada. Cuando se quiere enviar un mensaje, el emisor busca la clave pública del receptor, cifra su mensaje con esa clave, y una vez que el mensaje cifrado llega al receptor, este se ocupa de descifrarlo usando su clave privada.

Se cree que RSA será seguro mientras no se conozcan formas rápidas de descomponer un número grande en producto de primos. La computación cuántica podría proveer de una solución a este problema de factorización. [WIkipedia]

El mensaje que recibes

El mensaje que recibes del servidor, al intentar conectarte vía SSH por el Terminal reza tal que así:

$ ssh usuario@dominio.com
The authenticity of host 'dominio.com (xx.xx.xx.xx)' can't be established.
RSA key fingerprint is x6:90:x0:3a:x3:7b:81:74:64:eb:08:49:7e:0a:15:24.
Are you sure you want to continue connecting (yes/no)?

Este no es un mensaje que implique que ocurre algo malo: simplemente macOS no conoce al ordenador al que vamos a conectar y solicita que nosotros tomemos la decisión de conectarnos a el.

Si decidimos que si, hemos de escribir la palabra yes para recibir a continuación un mensaje similar a este:

Warning: Permanently added 'dominio.com' (RSA) to the list of known hosts.

Al añadir permanentemente la llave RSA asociada a un dominio, ya no nos aparecerá mas el mensaje y MacOS / OS X da por sentado que ese servidor “es bueno”.

Cuando cambia el hardware y/o el software del servidor

El problema, sin embargo, llega cuando el servidor, que mantiene el mismo dominio, cambia debido a múltiples circunstancias: una de las mas habituales es que el usuario ha cambiado su plan de alojamiento y consecuentemente ha cambiado el hardware/software que lo aloja.

Al intentar conectar vía SSH, resulta imposible y recibimos un mensaje indicándonos que es imposible.

La solución implica eliminar la entrada del correspondiente dominio de un archivo que no es visible. para ello, iremos en el Finder al menú Ir y nos desplazaremos hasta la opción Ir a la Carpeta (o utiliza el atajo de teclado ⌘ + mayúsculas + tecla G) y teclearemos la siguiente ruta /Users/tu_usuario/.ssh. Esta carpeta no la vas a encontrar con el Finder porque está oculta a la vista (lleva un punto delante del nombre y eso la hace automáticamente invisible a nuestros ojos)

Allí encontrarás un archivo que se llama known_hosts: es el archivo en el que se encuentran almacenados los dominios con su correspondiente clave RSA: ábrelo con un editor de textos como Textwrangler y busca la línea que corresponde al dominio en la que pondrá:

dominio.com, xxx.xxx.xxx.xxx ssh-rsa

La IP (xxx.xxx.xxx.xxx) puede ser opcional

Selecciona esa línea y las líneas inferiores llenas de números sin sentido que hay debajo hasta la siguiente línea en la que aparezca un dominio. Bórralas, guarda el archivo y ciérralo.

Ahora, a continuación, podrás conectarte por SSH de nuevo al servidor, y se te volverá a preguntar si aceptas la nueva clave RSA. Solo tendrás que aceptar y volver a trabajar con el servidor como si no hubiera pasado (casi) nada.

3 Comentarios

  1. carlosescri 12 enero, 2017

    Yo también tengo esa “mala costumbre” y estos pequeños artículos son bastante útiles para los que empiezan en estos menesteres del SSH. Como sugerencia, un artículo sobre cómo guardar de forma permanente la identidad id_rsa en el llavero de Sierra estaría bien, ya que es uno de mis mayores quebraderos de cabeza estos días. ¡Un saludo!

    1. En el terminal, en ssh_config, a partir de macOS 10.2.2 Sierra Apple ha añadido el verbo UseKeychain

      UseKeychain
      On macOS, specifies whether the system should search for
      passphrases in the user’s keychain when attempting to use a par-
      ticular key. When the passphrase is provided by the user, this
      option also specifies whether the passphrase should be stored
      into the keychain once it has been verified to be correct. The
      argument must be “yes” or “no”. The default is “no”.

      Tendrás que investigarlo un poco, pero ese seguramente es “el camino”.

      Adicionalmente este artículo, en paralelo, te puede servir de ayuda adicional:

      https://medium.freecodecamp.com/upgrading-to-macos-sierra-will-break-your-ssh-keys-and-lock-you-out-of-your-own-servers-f413ac96139a#.gvyncsvia

  2. Alberto Lozano 15 enero, 2017

    ¿Y no es más facil usar el comando:
    ssh-keygen -R dirección_del_servidor
    Para eliminar la key inválida?

Dejar un comentario

Twitter
Visit Us
Tweet
YouTube
Pinterest
LinkedIn
Share