¿Hay alguna manera de obtener mediante programación una huella digital de la clave del servidor SSH sin autenticarla ?
Estoy intentando ssh -v user@host false 2>&1 | grep "Server host key"
, pero esto se cuelga esperando una contraseña si la autenticación basada en clave no está configurada.
ssh-keygen -l -f - <(ssh-keyscan host)
sí?ssh-keyscan host | ssh-keygen -lf -
ssh-keygen -l -f <(ssh-keyscan host)
ssh-keygen -l -f -
funciona mucho como se esperaba en ssh-keygen 7.2 y superior. Produce algunas líneas de comentarios a STDERR que se pueden filtrar, como se menciona en la respuesta de Anthony Geoghegan ossh-keyscan host 2>/dev/null | ssh-keygen -l -f -
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:
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:Tipo de llave
El tipo de clave que se va a buscar se especifica mediante la
-t
opciónrsa1
(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) yed25519
(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 obsoletorsa1
(Protocolo SSH 1), por lo que los tipos de clave deberían especificarse explícitamente: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, lassh-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:
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: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 yassh-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.fuente
ssh-keygen
las versiones anteriores de OpenSSH tienen un problema al leer desde la tubería FIFO / con nombre. Investigaré esto (y actualizaré mi respuesta) cuando tenga algo de tiempo libre.printf
declaraciones de depuración en lado_fingerprint()
función, descubrí que con las versiones de OpenSSH anteriores a 7.2, las funciones utilizadasssh-keygen
para leer archivos no manejaban muy bien las canalizaciones con nombre (FIFOs) el método de sustitución del proceso no funcionaría.nmap
proporciona esta habilidad usando elssh-hostkey
script.Para devolver la huella digital hexadecimal de la clave:
Para devolver el contenido de la clave:
Para devolver la burbuja visual de la clave
Para devolver todo lo anterior:
Fuente: nmap docs
fuente
-p
opción de especificar un puerto, por ejemplo-p 22000
. También es posible usar la-vv
opción para aumentar la verbosidad (cantidad de información dada)Filezilla muestra claves hash con md5 en formato hexadecimal .
para encontrar esto en su máquina ubuntu linux use este comando:
nota: reemplace "localhost" con la ip de la máquina que desea verificar.
fuente
Aquí hay un script de shell (principalmente Bourne shell pero usando una
local
palabra clave, que está disponible en la mayoría de los modernos/bin/sh
) que he escrito para hacer esto. Úselo comossh-hostkey hostname
. Mostrará las huellas dactilares en formato sha256 y md5 para todas las teclas de host para el nombre de host o la dirección IP dados. También puede especificar manualmente "md5
" o "sha256
" como el segundo argumento para mostrar solo ese formato en particular.Utiliza un archivo temporal en lugar de tuberías para que sea compatible con paquetes OpenSSH más antiguos (como se describe en otras respuestas). El archivo temporal usa
/dev/shm
(memoria compartida) si está disponible.fuente