Saltar la navegación

6.2.2. Autenticación del servidor SSH

En el caso de autenticación por password, siempre que un equipo cliente va a conectarse por primera vez de forma remota al equipo servidor, recibe un aviso indicando que la clave pública del servidor remoto no está en su anillo de confianza. Esto es un indicativo de que no se puede garantizar la autenticidad del servidor. Por ejemplo, si la IP del servidor SSH al que el equipo cliente desea conectarse es 192.168.1.90, el mensaje mostrado sería el siguiente:

The authenticity of host '192.168.1.90 (192.168.1.90)' can't be established

Are you sure you want to continue connecting (yes/no)?

Ante esta cuestión existen dos opciones:

  • Si se responde yes, se añadirá la IP del host remoto a nuestra lista de host de confianza. Al añadirse, las siguientes veces que se intente establecer una conexión con el equipo remoto, este mensaje no saldrá porque la clave pública del host remoto ha sido añadida al anillo de confianza del equipo cliente. 

  • Si se contesta no, simplemente se cancela el intento de conexión.

Si la respuesta es yes, automáticamente se añade el host remoto al anillo de confianza y se muestra el siguiente mensaje:

Warning: Permanently added '192.168.1.90' to the list of knwon hosts.

A continuación se solicitará la password del usuario remoto con el cual se quiere realizar la conexión al servidor SSH, teniendo por defecto, tres intentos para introducir correctamente dicha password.

La realización o no de dicha pregunta es configurable a través del parámetro StrictHostKeyChecking del fichero de configuración del cliente SSH (/etc/ssh/ssh_config). Este parámetro acepta tres posibles valores:

  1. yes

    Cierra el intento de conexión si la clave pública del equipo remoto al que se intenta conectar no está en el anillo de confianza, es decir, no está entre los host conocidos (known_host).

  2. no

    Establece la conexión esté o no la clave pública del equipo remoto en el fichero de host conocidos.

  3. ask

    Pregunta si se quiere o no aceptar el intento de conexión sino está la clave pública del equipo remoto entre los host conocidos. Esta es la opción por defecto.

Un ejemplo de todo lo que se acaba de describir se puede ver en la siguiente imagen:

Ilustración que muestra la primera conexión desde un cliente por ssh a la máquina 192.168.1.90 con el usuario root. En la imagen se responde yes al intento de conexión, con lo que el host 192.168.1.90 queda añadido al anillo de confianza
Andrés Rubio - Elaboración propia (Dominio público)

Relacionado con la autenticidad de los equipos remotos, SSH ofrece una herramienta muy interesante. Se trata de ssh-keygen que permite verificar que la clave pública del otro extremo de la conexión es de quien dice ser. Para ello se usa el siguiente comando:

ssh-keygen -l -E funciónHash -f ficheroClavePública

siendo:

  1. fuciónHash 

    Función hash empleada en el fingerprint de la clave pública.

  2. ficheroClavePública:

    Ruta donde ha sido importada la clave pública del equipo remoto.

Reflexiona

Cuando un usuario lanza un comando remotamente sobre un servidor SSH, éste nos solicita la contraseña del usuario bajo el cual se ejecuta el comando. Este uso que a simple vista es idóneo para evitar que alguien pueda ejecutar comandos sin permiso, ¿sería apropiado si se quiere programar un script para que sea ejecutado de manera automática empleando, por ejemplo, el servicio cron?