Tengo un archivo PEM que agrego a un agente ssh en ejecución:
$ file query.pem
query.pem: PEM RSA private key
$ ssh-add ./query.pem
Identity added: ./query.pem (./query.pem)
$ ssh-add -l | grep query
2048 ef:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX ./query.pem (RSA)
¿Cómo puedo obtener la huella digital de la clave (que veo en ssh-agent) directamente del archivo? Sé que ssh-keygen -l -f some_key
funciona para claves ssh "normales", pero no para archivos PEM.
Si intento ssh-keygen en el archivo .pem, obtengo:
$ ssh-keygen -l -f ./query.pem
key_read: uudecode PRIVATE KEY----- failed
key_read: uudecode PRIVATE KEY----- failed
./query.pem is not a public key file.
Esta clave comienza con:
-----BEGIN RSA PRIVATE KEY-----
MIIEp.... etc.
a diferencia de una clave privada "normal", que se ve así:
-----BEGIN RSA PRIVATE KEY-----
Proc-Type: 4,ENCRYPTED
DEK-Info: AES-128-CBC,E15F2.... etc.
ssh
openssl
certificate
fingerprint
Desconocido
fuente
fuente
.ssh/id_rsa
archivo generado por OpenSSH usando todos los valores predeterminados ES un archivo PEM. Las claves privadas están codificadas por PEM de forma predeterminada. De hecho, puede usar claves RSA que genere con OpenSSL directamente con OpenSSH.ssh-keygen -l
no puedo leer un archivo de clave privada, aunque otrasssh-keygen
(yssh*
) operaciones sí lo hacen. Pero cuandossh-keygen
genera una clave, escribe tanto el archivo de clave privada, por ejemplo,id_rsa
y un archivo de clave pública correspondiente con,.pub
por ejemplo, agregadoid_rsa.pub
. Más viejosssh-keygen -l
se trate de añadir.pub
al nombre de archivo que especifique y leer ese archivo de clave pública.Respuestas:
Si desea recuperar la huella digital de su archivo de clave pública perdido, puede recuperarlo del archivo de clave privada :
Entonces puede determinar la huella digital pública:
En algunos sistemas más nuevos, esto imprime la huella digital SHA256 de la clave. Puede imprimir la huella digital MD5 de la clave (la forma de los dos puntos) usando la opción
-E
:O como una línea de comando :
fuente
La " Verificación de la huella digital de su par de claves " de AWS proporciona dos frases que resuelven el problema, dependiendo de cómo se creó su clave.
Si creó su par de claves con AWS:
O, si creó su par de claves con una herramienta de terceros:
(huellas digitales redactadas en la salida anterior)
fuente
Aquí hay una línea que debe hacer lo que desea sin requerir la creación de un archivo de clave pública localmente.
Esto utiliza la cadena bash here
<<<
para tener stdin disponible como un archivo normal (/dev/stdin
) en lugar de una tubería, yassh-keygen
que solo funcionará en un archivo.A partir de la versión 7.2 de openssh
ssh-keygen
admite las huellas digitales de la entrada estándar:Tenga en cuenta que este comando se romperá con claves privadas que usan una frase de contraseña y no están usando un agente. Debería funcionar con archivos pem generados por AWS u OpenStack que no usan frases de contraseña.
Consulte https://stackoverflow.com/questions/2635360/ssh-keygen-accepting-stdin para obtener más información.
fuente
-l
también admite la lectura de un archivo de clave privada (pero no de stdin).No obtiene la huella digital del archivo de clave privada sino del archivo de clave pública.
De hecho, ssh-keygen ya te dijo esto:
Ejecútelo contra la mitad pública de la clave y debería funcionar.
Más generalmente hablando
Piénselo: la razón por la que existe la huella digital es que puede identificar la clave pública. De hecho, obtener un hash de la clave privada es un problema de seguridad potencial además de ser inútil para el servidor (que ni siquiera TIENE la clave privada en cuestión).
Una vez que tenga la clave pública, el proceso consiste en verificar que el cliente tenga una retención en la mitad privada correspondiente. Como ya sabe qué claves está tratando de verificar, no necesita la huella digital.
fuente
ssh-keygen
funciona en un archivo de clave privada RSA que tiene la información adicional al inicio (ver mi publicación inicial), pero no en este. .ssh-keygen -yf
hace esto.