Cómo convertir clave privada de OpenSSH a formato PuTTY

Trabajando con Vagrant en un entorno Windows me encontré con un problema a la hora de conectar por SSH con las máquinas virtuales (aunque en este caso el término apropiado sería “boxes”):

  • Vagrant utiliza por defecto el formato estándar OpenSSH para generar las claves.
  • Al arrancar la máquina (box) de Vagrant, se crea automáticamente una clave privada que podremos utilizar posteriormente para autenticarnos y hacer login por SSH:
    Generación de claves en el arranque de la VM de Vagrant

    Generación de claves en el arranque de la VM de Vagrant

    La clave privada estaba localizada en la siguiente ruta, aunque esto cada caso será particular en función del directorio en el que hayas creado el entorno para la máquina virtual:

    C:\vagrant\project01\.vagrant\machines\default\virtualbox\private_key
    

En Windows suelo utilizar PuTTY o algún gestor de conexiones SSH que lo lleve integrado para administrar servidores UNIX/Linux, como por ejemplo mRemoteNG. Al intentar cargar la clave privada es cuando me surgieron problemas ya que su formato no es compatible con PuTTY. Tuve que recurrir entonces a PuTTYgen para realizar una sencilla conversión de formato.

Una vez tengamos disponible PuTTYgen lo ejecutamos y seguimos estos sencillos pasos:

  1. Importamos la clave privada en la pestaña Conversions → Import key
  2. Una vez cargada la clave privada en PuTTYgen tal y como podemos ver:
    Conversión de formato de clave con PuTTYgen

    Conversión de formato de clave con PuTTYgen

    Procedemos a guardarla en formato aceptado por PuTTY en el menú File → Save private key. No hace falta que pongamos una frase de paso (passphrase) aunque PuTTY nos lo sugiera. La clave privada se guardará con la extensión .ppk (putty private key). Una vez guardada la clave, podremos utilizarla con PuTTY sin problemas. En caso de tener que convertir la clave pública, bastaría con cargarla igual que hemos hecho con la privada y después guardarla con File → Save public key

El caso práctico que he puesto con Vagrant se puede aplicar a otras situaciones. Por ejemplo, en caso de que hayamos generado un par de claves pública/privada con OpenSSH a la manera tradicional:

ssh-keygen -t rsa

La clave privada generada no será compatible con PuTTY si en algún momento queremos utilizarla para autenticación. El procedimiento en cualquier caso para la conversión de formato es el mismo que el que he explicado en este artículo. De igual manera, puede que necesitemos realizar el proceso a la inversa, para lo que también podremos utilizar PuTTYgen.