¿Cómo obtener un archivo .pem del par de claves ssh?

33

Creé un par de claves usando ssh-keygen y obtuve los dos clásicos id_rsa e id_rsa.pub.

Importé la clave pública en mi cuenta de AWS EC2.

Ahora creé una instancia de Windows y para descifrar esa contraseña de instancia, la consola de AWS me está pidiendo un archivo .pem. ¿Cómo puedo obtener ese archivo .pem de mis dos archivos id_rsa e id_rsa.pub?

gsi-frank
fuente
2
La clave privada ya está en formato PEM y se puede usar como está.
Michael Hampton
@MichaelHampton, esto dependerá de la versión de ssh-keygen y del comando utilizado para generar el par de claves. Algunas versiones usan RFC4716 por defecto, en lugar de PEM.
austinian

Respuestas:

44

De acuerdo con esto , este comando se puede usar:

ssh-keygen -f id_rsa -e -m pem

Esto convertirá su clave pública a un formato compatible con OpenSSL. Su clave privada ya está en formato PEM y se puede usar como está (como dijo Michael Hampton).

Vuelva a comprobar si AWS no está pidiendo un (X.509) certificado en formato PEM, lo que sería una cosa diferente que sus claves SSH.

fuero
fuente
Pero ellos no necesitan la clave pública, ¿verdad? Necesitan la clave privada para descifrar su contraseña de la consola de AWS
Michael Bailey
No tengo idea de para qué OP necesita esto.
fuero
No estoy seguro de qué tan familiarizado está con AWS, pero cuando activa una instancia de Windows (básicamente servidor), AWS le guarda la contraseña hasta que le dé su clave privada. Luego te dan la contraseña del servidor. De esa forma, los servidores Windows y Linux en AWS dependen de claves privadas.
Michael Bailey
1
Esto no funciona en OS X (ssh -v ==> OpenSSH_6.2p2)
chrish
3
Contrariamente a la documentación, generará la clave PUBLIC en formato PEM, no la privada. Actualmente ssh-keygen no admite la conversión de claves privadas.
morgwai
21

Usar ssh-keygenpara exportar la clave en formato .pem funcionó para mí.

ssh-keygen -f id_rsa.pub -m 'PEM' -e > id_rsa.pem

Luego, simplemente copie la .pemclave según sea necesario.

Para referencia:

  • la -f id_rsa.pubporción indica el archivo de entrada para leer
  • -m 'PEM indica un tipo de archivo PEM
  • la -eopción indica que la salida se exportará
Mate
fuente
5

id_rsa es el archivo que debe usar para descifrar la contraseña de la instancia de Windows EC2, pero solo asegúrese de que el archivo que copie y pegue no esté protegido por frases.

Resolví el problema al obtener un id_rsaarchivo temporalmente desprotegido con algo como:

$ openssl rsa -in ~/.ssh/id_rsa -out tmp_file.pem
gsi-frank
fuente
2

Inicialmente, cuando lo usaba ssh-keygen, podía generar una clave pública que fuera compatible con AWS EC2, pero tenía problemas para crear claves privadas que fueran compatibles. A continuación, se crean pares de claves públicas y privadas que son compatibles con AWS EC2.

ssh-keygen -P "" -t rsa -b 4096 -m pem -f my-key-pair

Aquí hay información sobre cada parámetro:

  • -P: es para frase de contraseña. Configurado intencionalmente para vaciar.
  • -t: especifica el tipo de clave para crear. El par de claves AWS EC2 requiere RSA. Según mi experiencia, esto pertenece a la clave pública que se crea.
  • -b: especifica el número de bits en la clave. Las longitudes admitidas son 1024, 2048 y 4096. Si se conecta utilizando SSH mientras usa la API de conexión de instancia EC2, las longitudes admitidas son 2048 y 4096.
  • -m: especifica un formato de clave para la generación de claves. Establecer un formato de "PEM" al generar un tipo de clave privada compatible hará que la clave se almacene en el formato de clave privada PEM heredado. AWS EC2 Key Pair necesita el formato heredado
  • -f: especifica el nombre de archivo de salida del archivo de clave

Recursos:

Para obtener más información sobre ssh-keygen, consulte:  https://man.openbsd.org/ssh-keygen.1

AWS - Pares de claves EC2 -  https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-key-pairs.html

Mike Barlow - BarDev
fuente
Mike ha elegido no incluir documentación para la opción '-b'. Quizás sea obvio para algunos, eso significa "cifrado de 4096 bits por favor". Como se indica en el documento de AWS vinculado, "Las longitudes admitidas son 1024, 2048 y 4096. Si se conecta utilizando SSH mientras se usa la API de conexión de instancia EC2, las longitudes admitidas son 2048 y 4096".
nclark
@nclard, no estoy seguro de por qué dejé ese parámetro -b. Solo lo agregué.
Mike Barlow - BarDev
0

Cuando inicia una instancia de EC2, le asigna un par de claves (o ninguna). No se puede cambiar después.

Solo usando ese archivo .pem de ese par de claves podrá descifrar la contraseña de Windows.

El archivo .pem se habría descargado cuando se creó el par de claves. No puedes volver a conseguirlo. Si lo has perdido, no tienes suerte.

No puede usar un archivo .pem que generó usted mismo a menos que haya importado esa clave en AWS antes de que se iniciara la instancia y se la asignara a la instancia.

En pocas palabras, si no tiene el archivo .pem original, no puede obtener la contraseña.

Editar: después de volver a leer la pregunta, me doy cuenta de que el OP había importado su clave a AWS.

Matt Houser
fuente