Pregunta

¿Hay alguna manera fácil de verificar que una clave privada dada coincida con una clave pública dada? Tengo unos pocos archivos * .pub y algunos * .key, y necesito verificar con qué ir.

Nuevamente, estos son archivos pub / key, DSA.

Realmente preferiría una línea de algún tipo ...

¿Fue útil?

Solución

Encontré una forma que parece funcionar mejor para mí:

ssh-keygen -y -f <private key file>

ese comando generará la clave pública para la clave privada dada, así que simplemente compare la salida con cada archivo * .pub.

Otros consejos

Siempre comparo un hash MD5 del módulo usando estos comandos:

Certificate: openssl x509 -noout -modulus -in server.crt | openssl md5
Private Key: openssl rsa -noout -modulus -in server.key | openssl md5
CSR: openssl req -noout -modulus -in server.csr | openssl md5

Si los hashes coinciden, esos dos archivos van juntos.

Para claves DSA, use

 openssl dsa -pubin -in dsa.pub -modulus -noout

para imprimir las claves públicas, luego

 openssl dsa -in dsa.key -modulus -noout

para mostrar las claves públicas correspondientes a una clave privada, luego compárelas.

Suponiendo que tiene las claves públicas dentro de los certificados x.509, y suponiendo que son claves RSA, entonces, para cada clave pública, haga

    openssl x509 -in certfile -modulus -noout

Para cada clave privada, haga

    openssl rsa -in keyfile -modulus -noout

Luego haga coincidir las teclas por módulo.

El control se puede hacer más fácil con diff:

diff <(ssh-keygen -y -f <private_key_file>) <public key file>

Lo único extraño es que diff no dice nada si los archivos son iguales, por lo que solo se le informará si el público no coincide .

Elimine las claves públicas y genere nuevas a partir de las claves privadas. Guárdelos en directorios separados o use una convención de nomenclatura para mantenerlos en orden.

Si está en Windows y quiere usar una GUI, con puttygen puede importar su clave privada en él:

 ingrese la descripción de la imagen aquí

Una vez importado, puede guardar su clave pública y compararla con la suya.

Ingrese el siguiente comando para verificar si una clave privada y una clave pública son un conjunto coincidente (idéntico) o no un conjunto coincidente (diferente) en el directorio $ USER / .ssh. El comando de corte evita que se comparen los comentarios al final de la línea en la clave pública, lo que permite comparar solo la clave.

ssh-keygen -y -f ~/.ssh/id_rsa | diff -s - <(cut -d ' ' -f 1,2 ~/.ssh/id_rsa.pub)

La salida se verá como cualquiera de estas líneas.

Files - and /dev/fd/63 are identical

Files - and /dev/fd/63 differ

Escribí un script de shell que los usuarios usan para verificar el permiso de sus archivos ~ / .ssh / y el conjunto de claves coincidentes. Resuelve mis desafíos con incidentes de usuario que configuran ssh. Te puede ayudar. https://github.com/BradleyA/docker-security-infrastructure/ árbol / maestro / ssh

Nota: Mi respuesta anterior (en marzo de 2018) ya no funciona con las últimas versiones de openssh. Respuesta anterior: diff -qs & Lt; (ssh-keygen -yf ~ / .ssh / id_rsa) & Lt; (cut -d '' -f 1,2 ~ / .ssh / id_rsa.pub)

Cifre algo con la clave pública y vea qué clave privada lo descifra.

Este artículo del proyecto de código por nada menos que Jeff Atwood implementa un sistema simplificado envoltorio alrededor de las clases de criptografía .NET. Suponiendo que estas claves se crearon para su uso con RSA, use la clase asimétrica con su clave pública para cifrar, y lo mismo con su clave privada para descifrar.

Si no devuelve nada, entonces coinciden:

cat $HOME/.ssh/id_rsa.pub >> $HOME/.ssh/authorized_keys
ssh -i $HOME/.ssh/id_rsa localhost

Simplemente use puttygen y cargue su clave privada en eso. Ofrece diferentes opciones, p. exportando la clave pública de coressponding.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top