Por qué hay que convertir
OpenSSH no puede leer el formato PPK. Si le das directamente un archivo .ppk, falla. En nuestro sistema de pruebas el mensaje fue este, y otras versiones pueden mostrar otro, como el de invalid format:
Load key "key.ppk": error in libcrypto
La conversión cambia solo el formato del archivo. La clave sigue siendo la misma, así que los servidores que ya la aceptan siguen aceptándola.
Instala la herramienta de conversión
# Debian and Ubuntu
sudo apt install putty-tools
# macOS with Homebrew
brew install putty
De .ppk a OpenSSH
puttygen key.ppk -O private-openssh -o ~/.ssh/id_ed25519
puttygen key.ppk -O public-openssh -o ~/.ssh/id_ed25519.pub
Si la clave tiene una frase de contraseña, puttygen la pide. El archivo nuevo conserva la misma frase de contraseña. Después comprueba el resultado:
ssh-keygen -lf ~/.ssh/id_ed25519.pub
puttygen key.ppk -O fingerprint
Ambos muestran la misma huella SHA256:. El archivo de salida se creó con modo 600 en nuestra prueba, que es lo que quiere ssh. Si ssh se queja igualmente, consulta unprotected private key file.
Para obtener solo la línea de la clave pública a partir de una clave OpenSSH, mira cómo sacar la clave pública de la privada.
Claves RSA: formato antiguo o nuevo
Para una clave RSA, private-openssh escribe el formato antiguo, con BEGIN RSA PRIVATE KEY como primera línea. Para ed25519 siempre escribe el nuevo. Si quieres el formato más reciente también para RSA, usa:
puttygen key.ppk -O private-openssh-new -o ~/.ssh/id_rsa
OpenSSH actual lee ambos. Usa el antiguo solo para una herramienta que no pueda leer BEGIN OPENSSH PRIVATE KEY.
De OpenSSH a .ppk
puttygen ~/.ssh/id_ed25519 -O private -o key.ppk
Comprueba la primera línea del archivo nuevo:
PuTTY-User-Key-File-3: ssh-ed25519
PPK versión 3 y herramientas antiguas
Ese 3 es la versión del formato. Es la predeterminada desde 2021. Protege las frases de contraseña con Argon2, y las herramientas anteriores a 2021 que aceptan archivos PPK no pueden leerla. Para ellas, escribe la versión 2:
puttygen ~/.ssh/id_ed25519 -O private -o key.ppk --ppk-param version=2
La primera línea dirá entonces PuTTY-User-Key-File-2. La versión 2 resiste peor el adivinado de frases de contraseña, así que úsala solo cuando no haya más remedio, y actualiza la herramienta en cuanto puedas.
Uso en scripts con frase de contraseña
Estas opciones leen la frase de contraseña de un archivo en lugar de preguntarla. Pon el archivo en un lugar privado y bórralo después:
puttygen key.ppk --old-passphrase pass.txt -O private-openssh -o id_ed25519
Añade --new-passphrase newpass.txt para poner una distinta. Para quitar la frase de contraseña, usa un archivo vacío o /dev/null. Hazlo solo si de verdad quieres dejar la clave sin protección.
Con la ventana del generador de claves en Windows
- Haz clic en Load y abre el archivo
.ppk, o usa Conversions y luego Import para una clave OpenSSH. - Para escribir OpenSSH, usa Conversions y luego Export OpenSSH key.
- Para escribir PPK, haz clic en Save private key.
Preguntas
¿Puede OpenSSH usar un archivo .ppk?
No. ssh no lee el formato PPK. Convierte antes la clave como se muestra arriba y usa el archivo nuevo.
¿Convertir un .ppk cambia la clave?
No. Solo cambia el formato del archivo, así que los servidores que aceptan la clave la siguen aceptando. La huella es la misma antes y después.
¿Puede ssh-keygen convertir una clave privada .ppk?
No. ssh-keygen no lee claves privadas PPK. Usa el conversor que se muestra arriba.
Fuentes
- Generador de claves, capítulo 8 del manual
- Formato de archivo PPK, apéndice C del manual
- ssh-keygen(1), manual de OpenBSD