Recientemente tuve que hacer esto yo mismo, así que pensé en agregar una respuesta que muestre cómo se puede hacer esto (con versiones de OpenSSH 7.2 o más recientes ) en una línea usando la sustitución del proceso:
ssh-keygen -lf <(ssh-keyscan hostname 2>/dev/null)
El siguiente texto explica cómo funcionan estos comandos y resalta algunas de las diferencias de comportamiento entre las versiones anteriores y nuevas de las utilidades OpenSSH.
Obtener claves de host públicas
El ssh-keyscan
comando se desarrolló para que los usuarios puedan obtener claves de host públicas sin necesidad de autenticarse en el servidor SSH. Desde su página de manual:
ssh-keyscan
es una utilidad para recopilar las claves de host ssh públicas de varios hosts. Fue diseñado para ayudar en la construcción y verificación de
ssh_known_hosts
archivos.
Tipo de llave
El tipo de clave que se va a buscar se especifica mediante la -t
opción
rsa1
(Protocolo SSH obsoleto versión 1)
rsa
dsa
ecdsa
(versiones recientes de OpenSSH)
ed25519
(versiones recientes de OpenSSH)
En las versiones modernas de OpenSSH, los tipos de clave predeterminados a buscar son rsa
(desde la versión 5.1), ecdsa
(desde la versión 6.0) y ed25519
(desde la versión 6.7).
Con versiones anteriores de ssh-keyscan
(antes de OpenSSH versión 5.1), el
tipo de clave predeterminado era el obsoleto rsa1
(Protocolo SSH 1), por lo que los tipos de clave deberían especificarse explícitamente:
ssh-keyscan -t rsa,dsa hostname
Obtenga hashes de huellas dactilares de claves Base64
ssh-keyscan
imprime la clave de host del servidor SSH en
formato codificado en Base64 . Para convertir esto en un hash de huellas digitales, la ssh-keygen
utilidad se puede usar con su -l
opción para imprimir la huella digital de la clave pública especificada.
Si usa Bash, Zsh (o el shell Korn), la sustitución del proceso se puede usar para una práctica línea:
ssh-keygen -lf <(ssh-keyscan hostname 2>/dev/null)
Nota : Con las versiones de OpenSSH anteriores a 7.2, las funciones utilizadas
ssh-keygen
para leer archivos no manejaban las canalizaciones con nombre (FIFO) muy bien, por lo que este método no funcionaría, por lo que se requiere el uso de archivos temporales.
Algoritmos de hash
Versiones recientes de huellas dactilares de ssh-keygen
impresión SHA256 de las teclas. Para obtener los valores hash MD5 de las huellas digitales de la clave del servidor (el comportamiento anterior), la -E
opción se puede usar para especificar el algoritmo hash:
ssh-keygen -E md5 -lf <(ssh-keyscan hostname 2>/dev/null)
Usando una tubería
Si usa un shell POSIX (como dash
) que no presenta sustitución de proceso, las otras soluciones que usan archivos temporales funcionarán. Sin embargo, con las versiones más nuevas de OpenSSH (desde 7.2), se puede usar una tubería simple ya ssh-keygen
que aceptará -
como un nombre de archivo para la secuencia de entrada estándar, lo que permite un comando de tubería de una línea.
ssh-keyscan hostname 2>/dev/null | ssh-keygen -E md5 -lf -
ssh-keygen -l -f - <(ssh-keyscan host)
sí?