Calcule la huella digital de la clave RSA

903

Necesito hacer la auditoría de clave SSH para GitHub, pero no estoy seguro de cómo encontrar mi huella digital de clave RSA. Originalmente seguí una guía para generar una clave SSH en Linux.

¿Cuál es el comando que debo ingresar para encontrar mi huella digital de clave RSA actual?

Zakoff
fuente
21
FWIW, sigo volviendo a esta publicación porque github es donde veo huellas digitales en las teclas y quiero asegurarme de que estoy usando la clave privada correspondiente. tal vez no garantiza una etiqueta github desde este post ayuda a que la investigación relacionada con github?
hamx0r
44
@ hamx0r Regresé a esta publicación porque Gitlab también usa esas huellas digitales ...
Ray Foss
1
Llegué a él por Travis, que también lo usa. : D
Por Lundberg
44
Para todos aquellos que usan Linux que "siguen regresando a esta página", copie esto en su bashrc: function fingerprint() { ssh-keygen -lf $1 -E md5 }Luego (después de obtener el bashrc) puede obtener una huella digital confingerprint ~/.ssh/key_file
Jeff Diederiks
1
Para aquellos que prueban la función @JeffDiederiks y se preguntan por qué no está funcionando, las funciones Bash necesitan un seguimiento ;en el cuerpo, así que utilícelas function fingerprint() { ssh-keygen -lf $1 -E md5; }en su lugar.
tjjfvi

Respuestas:

1261

Ejecute el siguiente comando para recuperar la huella digital SHA256 de su clave SSH ( -lsignifica "lista" en lugar de crear una nueva clave, -fsignifica "nombre de archivo"):

$ ssh-keygen -lf /path/to/ssh/key

Entonces, por ejemplo, en mi máquina, el comando que ejecuté fue (usando la clave pública RSA):

$ ssh-keygen -lf ~/.ssh/id_rsa.pub
2048 00:11:22:33:44:55:66:77:88:99:aa:bb:cc:dd:ee:ff /Users/username/.ssh/id_rsa.pub (RSA)

Para obtener el formato de huella digital GitHub (MD5) con versiones más nuevas de ssh-keygen, ejecute:

$ ssh-keygen -E md5 -lf <fileName>

Información adicional:

ssh-keygen -lfTambién funciona en known_hostsy authorized_keysarchivos.

Para encontrar la mayoría de las claves públicas en sistemas Linux / Unix / OS X, ejecute

$ find /etc/ssh /home/*/.ssh /Users/*/.ssh -name '*.pub' -o -name 'authorized_keys' -o -name 'known_hosts'

(Si desea ver los homedirs de otros usuarios, deberá ser root o sudo).

El ssh-add -les muy similar, pero enumera las huellas digitales de las claves agregadas a su agente. (Los usuarios de OS X toman nota de que SSH mágico sin contraseña a través de Keychain no es lo mismo que usar ssh-agent).

Marvin Pinto
fuente
55
¿Cómo encuentro cuál es el camino?
pal4life
44
Como su ejemplo de huella digital hexadecimal tiene 32 dígitos, creo que sería una huella digital MD5, ¿correcto? A diferencia de una huella digital de 40 dígitos, que indicaría SHA1
culix
8
En sistemas que no son Ubuntu, el archivo relevante puede estar en / etc / ssh, por ejemplo /etc/ssh/ssh_host_rsa_key.pub
Zorawar
12
Vale la pena señalar que la huella digital debe ser la misma para ambas claves en un par de claves público / privado; entonces la huella digital de .ssh/id_rsadebe ser la misma que la de .ssh/id_rsa.pub. Por lo tanto, puede usar cualquiera de los dos (y, si es como yo y le encanta completar pestañas, hace que el trabajo tome 2 teclas menos. ¡Eficiencia!).
Parthian Shot
25
utilícelo ssh-keygen -E md5 -lf ~/.ssh/id_rsa.pubsi no desea la salida estándar sha256
user8162
677

Los nuevos comandos SSH enumerarán las huellas digitales como una clave SHA256 .

Por ejemplo:

ssh-keygen -lf ~/.ssh/id_dsa.pub 
1024 SHA256:19n6fkdz0qqmowiBy6XEaA87EuG/jgWUr44ZSBhJl6Y (DSA)

Si necesita compararlo con una huella digital anterior, también debe especificar el uso de la función de hash de huellas digitales MD5 .

ssh-keygen -E md5 -lf ~/.ssh/id_dsa.pub
2048 MD5:4d:5b:97:19:8c:fe:06:f0:29:e7:f5:96:77:cb:3c:71 (DSA)

También disponible: -E sha1

Actualización ... SÍ ... sí ... Lo sé ... Las claves DSA para SSH ya no deberían usarse, la clave RSA más antigua o las claves eclípticas más nuevas deberían utilizarse en su lugar.

A esos 'administradores' que siguen editando el comando que utilicé en lo anterior. ¡DEJA DE CAMBIARLO! ¡Usted hace que el comando y la salida resultante no coincidan!

Antonio
fuente
66
Vale la pena mencionar aquí que puede decirle sshque le muestre la antigua huella digital MD5 del servidor ssh -o FingerprintHash=md5 example.org, como se menciona en esta respuesta . (Solo estaba buscando eso, y esta respuesta me llevó a esa, así que creo que otros podrían tener una experiencia similar.)
Jonathan Y.
25
Esta respuesta es muy útil para aquellos que desean comparar sus claves con lo que muestra github.com (es decir, el MD5 formateado en hexadecimal)
hamx0r
2
También es muy útil para lo que se compara con qué masilla informará.
pjcard
27

Para ver su clave en Ubuntu, simplemente ingrese el siguiente comando en su terminal:

ssh-add -l

Obtendrá una salida como esta: 2568 0j:20:4b:88:a7:9t:wd:19:f0:d4:4y:9g:27:cf:97:23yourName @ ubuntu (RSA)

Sin embargo, si obtiene un error como; Could not open a connection to your authentication agent.
Entonces significa que ssh-agent no se está ejecutando. Puede iniciarlo / ejecutarlo con: ssh-agent bash(gracias a @Richard en los comentarios) y luego volver a ejecutarlossh-add -l

Komu
fuente
55
Si no está en Ubuntu, podría obtener esto desafortunadamente "No se pudo abrir una conexión con su agente de autenticación".
rogerdpack
1
Esto solo funciona si tiene el agente de autenticación en ejecución.
Rufflewind
Para ejecutar el agente de autenticación, puede usar ssh-agent bashy continuar con la vida. En la vida como siempre; ssh-agentno está garantizado como una implementación consistente en todos los sistemas.
Richard Kenneth Niescior
Otro consejo para Linux; La opción -F (volcar huella digital) de ssh-keygen-g3 mostrará la huella digital de la clave: $ ssh-keygen-g3 -F /path/to/keyfile.pub answers.ssh.com/questions/494/…
AnneTheAgile
18

Un par de claves (las claves privadas y públicas) tendrán la misma huella digital; entonces, en el caso de que no recuerde qué clave privada pertenece a qué clave pública, encuentre la coincidencia comparando sus huellas digitales.

La respuesta más votada por Marvin Vinto proporciona la huella digital de un archivo de clave SSH pública . La huella digital de la clave SSH privada correspondiente también se puede consultar, pero requiere una serie de pasos más larga, como se muestra a continuación.

  1. Cargue el agente SSH, si aún no lo ha hecho. La forma más fácil es invocar

    $ ssh-agent bash
    

    o

    $ ssh-agent tcsh
    

    (u otro shell que uses).

  2. Cargue la clave privada que desea probar:

    $ ssh-add /path/to/your-ssh-private-key
    

    Se le pedirá que ingrese la frase de contraseña si la clave está protegida con contraseña.

  3. Ahora, como han dicho otros, escriba

    $ ssh-add -l
    1024 fd:bc:8a:81:58:8f:2c:78:86:a2:cf:02:40:7d:9d:3c you@yourhost (DSA)
    

    fd:bc:...es la huella digital que buscas. Si hay varias claves, se imprimirán varias líneas y la última línea contiene la huella digital de la última clave cargada.

  4. Si desea detener el agente (es decir, si invocó el paso 1 anterior), simplemente escriba 'exit' en el shell y volverá al shell antes de cargar el agente ssh.

No agrego nueva información, pero espero que esta respuesta sea clara para los usuarios de todos los niveles.

Wirawan Purwanto
fuente
El primer párrafo es falso ssh-add -ly ssh-keygen -ldevuelve la misma huella digital para un par de claves dado. Además, debe ser minúscula -l, no mayúscula.
Albertas Agejevas
No impugno eso ssh-add -ly ssh-keygen -ldevuelvo la misma huella digital para un par de claves dado. Pero no entiendo qué estaba mal con mis declaraciones originales en el primer párrafo. Agregué una oración para aclarar.
Wirawan Purwanto
1
Es simple señalar ssh-keygen a una clave, en lugar de iniciar el agente, luego cargar la clave y luego obtener la huella digital.
Albertas Agejevas
1
Si solo tiene la clave privada, no necesariamente necesita ejecutarla ssh-agent. Suponiendo que PRIVKEYse ha establecido en el archivo de clave privada y PUBKEYse ha establecido en el archivo de clave pública (inicialmente no existente), haga: ssh-keygen -y -f "${PRIVKEY}" > "${PUBKEY}"para regenerar la clave pública SSH, entonces ssh-keygen -E md5 -l -v -f "${PUBKEY}"si desea el hash MD5 o simplemente ssh-keygen -l -v -f "${PUBKEY}"si desea el hash SHA-256 (SHA-256 es el valor predeterminado ahora).
David Tonhofer
12

La forma más rápida si sus claves están en un agente SSH:

$ ssh-add -L | ssh-keygen -E md5 -lf /dev/stdin

Cada clave del agente se imprimirá como:

4096 MD5:8f:c9:dc:40:ec:9e:dc:65:74:f7:20:c1:29:d1:e8:5a /Users/cmcginty/.ssh/id_rsa (RSA)
cmcginty
fuente
3
Necesitaba una forma más rápida de hacer coincidir mis claves con las de mi cuenta de GitHub y esta respuesta me ayudó a hacer eso.
evanjs
11

Reproducción de contenido de foros de AWS aquí, porque lo encontré útil para mi caso de uso: quería comprobar cuáles de mis claves coincidían con las que había importado a AWS

openssl pkey -in ~/.ssh/ec2/primary.pem -pubout -outform DER | openssl md5 -c

Donde: - primary.pemes la clave privada para verificar

Phil
fuente
9
$ ssh-add -l 

también funcionará en Mac OS X v10.8 (Mountain Lion) - v10.10 (Yosemite).

También admite la opción -Ede especificar el formato de huella digital, por lo que en caso de que se necesite MD5 (a menudo se usa, por ejemplo, por GitHub), simplemente agregue -E md5al comando.

geeklizzard
fuente
+1 para la respuesta más simple. De man ssh-addla opción -les "Enumera las huellas digitales de todas las identidades representadas actualmente por el agente"
XavierStuvw
8

En Windows, si está ejecutando PuTTY / Pageant, la huella digital aparece cuando carga su clave PuTTY (.ppk) en Pageant. Es bastante útil en caso de que olvide cuál está usando.

Ingrese la descripción de la imagen aquí

Dmitri R117
fuente
3
Gracias, a veces nosotros, la gente de Linux, nos olvidamos de Windows, especialmente porque la OP mencionó masilla.
Jmons
@ DmitriR117 ¿por qué pintaste la clave pública negra como puede ser conocida por todo el mundo?
Michu93
8

Esta es la función de shell que uso para obtener la huella digital de mi llave SSH para crear gotas de DigitalOcean :

fingerprint() {
    pubkeypath="$1"
    ssh-keygen -E md5 -lf "$pubkeypath" | awk '{ print $2 }' | cut -c 5-
}

Póngalo en su ~/.bashrcfuente, y luego puede obtener la huella digital de la siguiente manera:

$ fingerprint ~/.ssh/id_rsa.pub
d2:47:0a:87:30:a0:c0:df:6b:42:19:55:b4:f3:09:b9
Bryce Guinta
fuente
2

Si su agente SSH se está ejecutando, es

ssh-add -l

para enumerar las huellas digitales de RSA de todas las identidades, o -Lpara enumerar claves públicas.

Si su agente no se está ejecutando, intente:

ssh-agent sh -c 'ssh-add; ssh-add -l'

Y para tus claves públicas:

ssh-agent sh -c 'ssh-add; ssh-add -L'

Si recibe el mensaje: ' El agente no tiene identidades. ', entonces ssh-keygenprimero debe generar su clave RSA .

kenorb
fuente
Instalé openssh, luego intenté conectarme al servidor usando masilla. Presenta una huella digital de 256 ssh-ed25519 clave, pero recibo el mensaje "sin identidades". ¿Sabes dónde se puede encontrar y enumerar esta clave? ¿Existe una desventaja al usar esta clave, en comparación con la generación de una nueva clave RSA?
lordcheeto
Lo encontré debajo /etc/ssh/ssh_host_ed25519_key.pub. La segunda parte de la pregunta sigue siendo: ¿alguna desventaja de usar esta clave generada automáticamente?
lordcheeto
1

A veces puede tener un montón de claves en su ~/.sshdirectorio, y no sabe cuál coincide con la huella digital mostrada por GitHub / Gitlab / etc.

Aquí le mostramos cómo mostrar los nombres de archivo de clave y las huellas digitales MD5 de todas las claves en su ~/.sshdirectorio:

cd ~/.ssh
find . -type f -exec printf "\n{}\n" \; -exec ssh-keygen -E md5 -lf {} \;

(Para saber qué significan los parámetros, consulte esta respuesta sobre el findcomando .

Tenga en cuenta que los archivos privados / públicos que pertenecen a una clave tienen la misma huella digital, por lo que verá duplicados.

Dan Dascalescu
fuente
0

Google Compute Engine muestra la huella digital de la clave del host SSH en la salida en serie de una instancia de Linux. La API puede obtener esos datos de GCE y no es necesario iniciar sesión en la instancia.

No lo encontré en ningún otro lado, sino en la salida en serie. Creo que la huella digital debería estar en un lugar más amigable para los programadores.

Sin embargo, parece que depende del tipo de instancia. Estoy usando instancias de Debian 7 (Wheezy) f1-micro.

re Paul
fuente
-1

Para verificar un servidor SSH remoto antes de la primera conexión, puede visitar www.server-stats.net/ssh/ para ver todas las claves SHH para el servidor, así como desde el momento en que se conoce la clave.

Eso no es como un certificado SSL, pero definitivamente es algo que debe hacer antes de conectarse a cualquier servidor SSH por primera vez.

p974
fuente
44
El usuario no estaba buscando un sitio web de terceros, sino una línea de comando desde el sistema operativo.
Andrew Barber
Entonces, es básicamente el complemento de convergencia , a excepción de SSH en lugar de SSL, y con un solo notario (algo dudoso). ¿Eso suena bien?
Parthian Shot
-1

En Fedora hago lo locate ~/.sshque me dice que las claves están en

/root/.ssh
/root/.ssh/authorized_keys
Jesse William Mac Dougall
fuente
1
El OP parece saber dónde encontrar sus claves (Esto no es, ~/.ssh/id*.pubes) y quiere obtener sus huellas digitales.
Gert van den Berg