Cómo recuperar una clave pública SSH a partir de la clave privada

Ejecuta ssh-keygen -y -f ~/.ssh/id_ed25519 > ~/.ssh/id_ed25519.pub. Esto lee la clave privada e imprime la clave pública correspondiente, así que un archivo .pub perdido siempre se puede reconstruir. Si la clave tiene frase de contraseña, tienes que escribirla. Lo contrario no es posible: no se puede obtener una clave privada a partir de una pública.

Actualizada el . Comandos ejecutados con OpenSSH 10.0 en Debian 13, con claves ed25519 y RSA, con y sin frase de contraseña.

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 FILE y bad permissions. Ejecuta chmod 600 sobre el archivo y vuelve a intentarlo.
  • Le diste el archivo equivocado. -y necesita la clave privada, no el archivo .pub.
  • Es un archivo .ppk. Usa en su lugar puttygen 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.

Fuentes

Más en Claves y acceso

Todas las guías