El comando
ssh-keygen -y -f ~/.ssh/id_ed25519
ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAINH9eelf0P7eT5ue6SualUXFrh1c9p3Maaem93iZtC2Q you@laptop
Esto imprime la clave en pantalla. Para devolverla a su archivo, envía la salida allí:
ssh-keygen -y -f ~/.ssh/id_ed25519 > ~/.ssh/id_ed25519.pub
El mismo comando sirve para una clave .pem descargada de un proveedor cloud, como un par de claves de AWS: ssh-keygen -y -f key.pem.
Para volver a poner la clave en un servidor, consulta cómo funciona authorized_keys.
Qué puede salir mal
- Olvidaste la frase de contraseña. Obtienes
Load key "id_ed25519": incorrect passphrase supplied to decrypt private key. No hay forma de saltárselo sin la frase de contraseña. Crea una clave nueva. - Otros pueden leer el archivo. Obtienes
UNPROTECTED PRIVATE KEY FILEybad permissions. Ejecutachmod 600sobre el archivo y vuelve a intentarlo. - Le diste el archivo equivocado.
-ynecesita la clave privada, no el archivo.pub. - Es un archivo
.ppk. Usa en su lugarputtygen key.ppk -L, o conviértelo primero.
Puede faltar el comentario
El formato nuevo de OpenSSH guarda el comentario dentro de la clave privada, así que vuelve a aparecer en la salida. Una clave en el formato antiguo, cuya primera línea es BEGIN RSA PRIVATE KEY, no tiene ninguno, y obtienes solo el tipo y la clave. Funciona igual de bien. Añade un comentario al final de la línea a mano si quieres uno.
Comprueba que un archivo .pub corresponde a una clave privada
ssh-keygen -lf no es una comprobación fiable para esto. Si se le da una clave privada con un archivo .pub al lado, lee el archivo .pub, así que muestra la huella equivocada si los dos no van juntos. Lo confirmamos con un par que no coincidía. Compara en su lugar las claves reales:
diff <(ssh-keygen -y -f ~/.ssh/id_ed25519 | cut -d' ' -f1,2) <(cut -d' ' -f1,2 ~/.ssh/id_ed25519.pub) && echo same
Funciona en bash y zsh. Imprime same cuando coinciden y muestra la diferencia cuando no. El cut deja el comentario fuera de la comparación.
Preguntas
¿Se puede obtener la clave privada a partir de la pública?
No. La clave pública se calcula a partir de la privada y el cálculo no se puede invertir. Si pierdes la privada, genera un par nuevo.
¿Por qué ssh-keygen -y pide una frase de contraseña?
La clave privada está cifrada con ella, y ssh-keygen tiene que descifrarla para calcular la parte pública. Sin la frase no hay forma de obtenerla.
¿Importa el comentario al final de la línea .pub?
No. Es solo una etiqueta, por ejemplo you@laptop. Los servidores lo ignoran, así que una clave pública sin comentario funciona igual.