
¿Cómo puedo verificar la huella digital del host recién conectado cuando intento conectarme desde mi máquina remota a la máquina doméstica? En la primera conexión me salió esto:
[email protected]$ ssh [email protected]:~/
The authenticity of host '[home-machine.org]:222 ([x.xx.xx.xx]:222)' can't be established.
ECDSA key fingerprint is SHA256:6lr/VtTwgrKZVNZQ8y8Le/ilfBYfo0e+9UliSg+AD2k.
Are you sure you want to continue connecting (yes/no)?
¿Cómo puedo comprobar la huella digital de mi "máquina doméstica"? Estaba intentando enumerarlos en la máquina de mi casa de esta manera:
[email protected]:~$ for pubkey_file in /etc/ssh/*.pub; do ssh-keygen -lf ${pubkey_file}; done
1024 d1:ef:db:b4:24:fc:ca:fe:e1:11:8c:36:0a:77:90:49 /etc/ssh/ssh_host_dsa_key.pub (DSA)
256 d9:25:51:16:ca:76:bd:8f:b8:6a:79:a2:1c:81:4b:4c /etc/ssh/ssh_host_ecdsa_key.pub (ECDSA)
2048 3a:c6:2d:29:7c:b9:16:e8:ed:1c:a8:26:5d:ab:0d:1e /etc/ssh/ssh_host_rsa_key.pub (RSA)
[email protected]:~$
Pero esas claves parecen tener un formato diferente. ¿Es esto algún tipo de MD5 de huella digital? ¿Cómo puedo tener esas huellas en formato unificado?
Respuesta1
Su servidor SSH proporciona hashes de clave pública SHA256, que es mucho más seguro que los hashes MD5.
Luego debe especificar en ssh-keygen que desea hashes SHA256 en lugar de MD5. Intente ejecutar el comando en sumaquina-domestica(a la que intenta conectarse desde la máquina remota en su ejemplo):
for pubkey_file in /etc/ssh/*.pub; do ssh-keygen -lf ${pubkey_file} -E sha256; done
Respuesta2
Comandos utilizados
Muestre el arte ascii de la clave de host pública almacenada en el servidor (que se debe hacer 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 que no esté disponible en versiones antiguas de ssh-keygen)
-F: archivo
Muestre el arte ascii de la clave de host público del servidor remoto (que se realizará en el lado del cliente, desde el que se conecta a través de ssh):
ssh -o visualhostkey=yes -o FingerprintHash=md5 <host_server_to_connect>
-o: opción
clavevisualhost: visual (arte ascii)
Huella digitalHash: hash algo a usar (usa el mismo que obtienes del servidor: md5 o sha256)
Pasos para comprobar 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 arte ascii. Imprímelo o toma una fotografía.
Segundo, 2.se debe realizar en la primera conexión SSH; mostrará un segundo arte ascii. Si el arte ascii es el mismo, entonces puedes responderSíhacia"¿Confío?"pregunta (es decir
Are you sure you want to continue connecting (yes/no)
).
Ejemplo
- 1. Lado del servidor
$ ssh-keygen -l -v -E md5 -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.. |
+-----------------+
- 2. Lado del cliente
$ 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 proporcionas como entrada (y la huella digital misma). El archivo que das como entrada es el público.anfitriónclave 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, entonces el cliente calculará la huella digital de esta clave pública de host con un algoritmo hash (un algoritmo hash diferente dará una huella digital diferente). Se muestra esta huella digital previamente calculada (junto con el arte ascii si se proporciona la opción correspondiente) y tendrá que responder sí o no dependiendo de si reconoce esta huella digital o no (esta huella digital es la imagen/hash de la clave pública de host del servidor). Si dice que sí, se agregará al archivo la clave pública del servidor (no su huella digital) ~/.ssh/known_hosts
.
Podemos notar que ~/.ssh/known_hosts
está debajo.sudirectorio de inicio (~), porquetúconfíe en este host (servidor), pero es posible que un usuario diferente no confíe en el mismo que usted. Además, la clave pública del host del servidor no depende del usuario, por lo que se almacena en formato /etc/ssh/
.
El segundo comando mostrará la huella digital y el arte ascii de la clave pública recibida delservidor_host_para_conectar(de acuerdo con el algoritmo hash indicado 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.
Respuesta3
Servidor
ssh-keygen -l -v -f /etc/ssh/ssh_host_ed25519_key
Es posible que deba hacer coincidir esto con el algoritmo del cliente con uno de los otros archivos en ese directorio. Los archivos tienen los permisos adecuados, por lo que utilizarán la clave pública.
Por ejemplo, es posible que necesites escribir
ssh-keygen -l -v -f /etc/ssh/ssh_host_rsa_key
Cliente
ssh -o visualhostkey=yes -o FingerprintHash=sha256