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.
PRIVKEY=id_rsa
TESTKEY=id_rsa.pub
diff <( ssh-keygen -y -e -f "$PRIVKEY" ) <( ssh-keygen -y -e -f "$TESTKEY" )
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, si echo 5 > id_rsa
borra la clave privada, haga la diferencia, ¡la diferencia pasará! Además, ejecutar ssh-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,
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:
ssh-keygen -y -f id_rsa | cut -d' ' -f 2
con
cut -d' ' -f 2 id_rsa.pub
Por lo tanto:
diff <(cut -d' ' -f 2 id_rsa.pub) <(ssh-keygen -y -f id_rsa | cut -d' ' -f 2)
Quizás esto no sea tan flexible, pero es mejor para mis necesidades. Quizás ayude a alguien más.
Si están en su sistema local, manténgase id_rsa.pub
en su $HOME/.ssh/authorized_keys
y ssh
para localhost
usar la id_rsa
clave. Si funciona, entonces coinciden.
cat $HOME/.ssh/id_rsa.pub >> $HOME/.ssh/authorized_keys
ssh -i $HOME/.ssh/id_rsa localhost
ssh -v
Ayuda mucho también.