Comandos utilizados
Muestre el arte ascii de la clave de host pública almacenada en el servidor (que debe hacerse en el lado del servidor, al que se conecta a través de ssh):
ssh-keygen -l -v -E md5 -f /etc/ssh/ssh_host_ecdsa_key.pub
-l : muestra la huella digital del archivo de clave pública especificado.
-v : visual (arte ascii)
-E md5 : el algoritmo hash utilizado para calcular la huella digital ("md5" o "sha256"). (Se prefiere "sha256" si está disponible). (puede no estar disponible en versiones anteriores de ssh-keygen)
-f : archivo
Muestre el arte ascii de la clave de host pública del servidor remoto (para hacerla en el lado del cliente, desde la que se conecta a través de ssh):
ssh -o visualhostkey=yes -o FingerprintHash=md5 <host_server_to_connect>
-o : opción
visualhostkey : visual (ascii-art)
FingerprintHash : hash algo para usar (use el mismo que el que obtiene del servidor: md5 o sha256)
Qué hacer para verificar la autenticidad de un host / servidor
Primero, 1. debe hacerse localmente en el servidor (al que desea conectarse a través de ssh): le dará un primer ascii-art. Imprímelo o toma una foto.
Segundo, 2. debe hacerse en la primera conexión SSH; mostrará un segundo arte ascii. Si el arte ascii es el mismo, entonces puedes responder sí a "¿Confío?" pregunta (es decir Are you sure you want to continue connecting (yes/no)
).
Ejemplo
$ ssh-keygen -l -v -f /etc/ssh/ssh_host_ecdsa_key.pub
256 2e:a6:b3:27:14:12:0b:79:df:9a:7f:bd:4d:b1:e0:b6 (ECDSA)
+--[ECDSA 256]---+
| . |
|o o |
| o + . |
| o o . |
| . + S . . |
| + . . . o |
| . .o ..o o |
| ooo....+ |
| o= . E.. |
+-----------------+
$ ssh -o visualhostkey=yes -o FingerprintHash=md5 192.168.12.211
The authenticity of host '192.168.12.211 (192.168.12.211)' can't be established.
ECDSA key fingerprint is MD5:2e:a6:b3:27:14:12:0b:79:df:9a:7f:bd:4d:b1:e0:b6.
+---[ECDSA 256]---+
| . |
|o o |
| o + . |
| o o . |
| . + S . . |
| + . . . o |
| . .o ..o o |
| ooo....+ |
| o= . E.. |
+------[MD5]------+
Are you sure you want to continue connecting (yes/no)?
Alguna explicación más
El primer comando mostrará el arte ascii correspondiente a la huella digital del archivo que ingresa (y la propia huella digital). El archivo que ingresa como entrada es la clave de host pública del servidor. Cuando un cliente se conecta (no solo por primera vez), el servidor enviará su clave de host pública. Esta clave de host pública se buscará en~/.ssh/known_hosts
. Si la clave pública está en el archivo, entonces está bien: se conoce el host (servidor), por lo que pasamos al siguiente paso para autenticar al usuario (la autenticación del usuario no se describe en esta publicación). Si la clave pública no está en el archivo, el cliente calculará la huella digital de esta clave de host pública con un algoritmo hash (un algoritmo hash diferente dará una huella digital diferente). Se muestra esta huella digital previamente calculada (junto con el ascii-art si se proporciona la opción correspondiente) y deberá responder sí o no dependiendo de si reconoce esta huella digital o no (esta huella digital es la imagen / hash de la clave de host pública de la clave servidor). Si dice que sí, se agregará al archivo la clave bublic del servidor (no su huella digital) ~/.ssh/known_hosts
.
Podemos notar que ~/.ssh/known_hosts
es en el directorio a casa (~), debido a que confía en este host (servidor), pero un usuario diferente puede no confiar en lo mismo que usted. Además, la clave pública del host del servidor no depende del usuario, por lo que se almacena en /etc/ssh/
.
El segundo comando mostrará la huella digital y el arte ascii de la clave pública recibida del host_server_to_connect (de acuerdo con el algoritmo hash dado en las opciones). Es lo mismo que hacer solo ssh, pero con más opciones visuales, por lo que la conexión continuará de la misma manera que una conexión ssh normal.
-E
cambio no ayudará muy probablemente.