ssh-keygen -y -e -f <private key>toma una clave privada e imprime la clave pública correspondiente que se puede comparar directamente con sus claves públicas disponibles. (Sugerencia: tenga cuidado con los comentarios o las opciones clave).
(¿Cómo demonios está haciendo eso? Solo puedo esperar que la clave pública esté codificada directa o indirectamente en la clave privada ...)
Yo mismo necesitaba esto y usé el siguiente Bash one-liner. No debería mostrar nada si las teclas van juntas. Aplique un poco -qal diff en scripts y diff solo establece el código de retorno de manera adecuada.
@MichaelHampton: ahora entiendo tu comentario. "la respuesta aceptada" debería referirse a la pregunta sobre stackoverflow, no a esta pregunta ...
Michuelnik
1
@Sirch: pensé que la decisión de qué clave es privada y cuál es pública es puramente aleatoria ya que las dos claves son iguales. Lo que una clave cifra solo se puede descifrar con la otra. Y si se pudiera obtener una clave de la otra, todo esto no funcionaría.
Michuelnik
1
@Michuelnik Puede derivar la clave pública de la clave privada. No puede derivar la clave privada de la clave pública. No estábamos hablando del material que encripta.
Sirch
1
@Michuelnik en mi humilde opinión, la pregunta está fuera del tema en SO y en el tema aquí (y / o Superusuario). En mi opinión, no debe marcarse como duplicado y, en su lugar, marcarse allí para la migración. Pero está cubierto en ambos, así que me gusta el intercambio más completo de información.
Chris K
10
Mientras exista id_rsa.pub, ssh-keygen -y -e -f id_rsano comprobará id_rsa en absoluto, sino que solo devolverá el valor de id_rsa.pub. Entonces, por ejemplo, si echo 5 > id_rsaborra la clave privada, haga la diferencia, ¡la diferencia pasará! Además, ejecutar ssh-keygen -yef foodonde foo no es una clave válida (y no tiene foo.pub correspondiente) bloqueará la espera de la entrada del usuario, así que tenga cuidado al usar esto en un script.
32
Dependiendo de dónde obtenga el archivo de clave pública que está probando, la respuesta aceptada puede dar resultados falsos positivos. Esto se debe al comportamiento descrito en el comentario de @drewbenn. Específicamente, cuando la opción -e se usa con el archivo de clave privada como el parámetro de opción -f, simplemente repite (pero reformatea) lo que está en el archivo de clave pública asociado.
En otras palabras,
ssh-keygen -y -f id_rsa
(aparentemente) genera el valor de clave pública, y
ssh-keygen -y -e -f id_rsa
simplemente y genera (y reformatea) la clave en el id_rsa.pub existente, sea lo que sea .
En mi caso, tengo que verificar que el par no haya sido dañado. Entonces, decidí comparar lo siguiente:
Esto realmente debería reemplazar la respuesta aceptada o al menos superarla en términos de votos positivos.
thomanski
¡Gracias! Este comando no funciona con claves con una frase de contraseña, no lo solicita de forma interactiva. Extraje el contenido del comando two () a los archivos y los diferencié, eso funciona.
Yaroslav Nikitenko
5
Si están en su sistema local, manténgase id_rsa.puben su $HOME/.ssh/authorized_keysy sshpara localhostusar la id_rsaclave. Si funciona, entonces coinciden.
ssh -v
Ayuda mucho también.Respuestas:
Preferiría el
ssh-keygen -y -e -f <private key>
camino en lugar de la respuesta aceptada de ¿Cómo se prueba un par de claves DSA público / privado? en desbordamiento de pila.ssh-keygen -y -e -f <private key>
toma una clave privada e imprime la clave pública correspondiente que se puede comparar directamente con sus claves públicas disponibles. (Sugerencia: tenga cuidado con los comentarios o las opciones clave).(¿Cómo demonios está haciendo eso? Solo puedo esperar que la clave pública esté codificada directa o indirectamente en la clave privada ...)
Yo mismo necesitaba esto y usé el siguiente Bash one-liner. No debería mostrar nada si las teclas van juntas. Aplique un poco
-q
al diff en scripts y diff solo establece el código de retorno de manera adecuada.fuente
ssh-keygen -y -e -f id_rsa
no comprobará id_rsa en absoluto, sino que solo devolverá el valor de id_rsa.pub. Entonces, por ejemplo, siecho 5 > id_rsa
borra la clave privada, haga la diferencia, ¡la diferencia pasará! Además, ejecutarssh-keygen -yef foo
donde foo no es una clave válida (y no tiene foo.pub correspondiente) bloqueará la espera de la entrada del usuario, así que tenga cuidado al usar esto en un script.Dependiendo de dónde obtenga el archivo de clave pública que está probando, la respuesta aceptada puede dar resultados falsos positivos. Esto se debe al comportamiento descrito en el comentario de @drewbenn. Específicamente, cuando la opción -e se usa con el archivo de clave privada como el parámetro de opción -f, simplemente repite (pero reformatea) lo que está en el archivo de clave pública asociado.
En otras palabras,
(aparentemente) genera el valor de clave pública, y
simplemente y genera (y reformatea) la clave en el id_rsa.pub existente, sea lo que sea .
En mi caso, tengo que verificar que el par no haya sido dañado. Entonces, decidí comparar lo siguiente:
con
Por lo tanto:
Quizás esto no sea tan flexible, pero es mejor para mis necesidades. Quizás ayude a alguien más.
fuente
Si están en su sistema local, manténgase
id_rsa.pub
en su$HOME/.ssh/authorized_keys
yssh
paralocalhost
usar laid_rsa
clave. Si funciona, entonces coinciden.fuente