La contraseña de Windows no se descifrará en AWS EC2 incluso con la clave privada correcta

21

Creé una nueva instancia de Windows en AWS EC2, usando un par de claves que creé cargando mi clave pública desde mi máquina local.

La instancia se lanzó bien, pero no descifrará la contraseña. Reporta:

La clave privada debe comenzar con "----- BEGIN RSA PRIVATE KEY -----" y terminar con "----- END RSA PRIVATE KEY -----"

Estoy seguro de que cargué la clave correcta. He verificado que las huellas dactilares coinciden con los de AWS utiliza el formato de huellas digitales extraños . Pero simplemente no se descifrará.

Intenté cargar el archivo de clave y pegarlo en el formulario.

Eventualmente descubrí que no está quitando la nueva línea final y eliminé la línea en blanco en la clave. Sin embargo, eso solo me lleva a un nuevo error cuando hago clic en "Descifrar contraseña":

Se produjo un error al descifrar su contraseña.  Asegúrese de haber ingresado su clave privada correctamente.

Craig Ringer
fuente

Respuestas:

22

La administración de claves de AWS EC2 no hace frente a las claves privadas SSH que tienen contraseñas configuradas (están encriptadas). No detecta esto, y simplemente falla con un error no informativo.

Si su clave privada se almacena cifrada en el disco (como debería ser, IMO), debe descifrarla para pegarla en la consola de AWS.

En lugar de hacerlo, considere descifrar la contraseña localmente, para que no tenga que enviar su clave privada a AWS. Obtenga los datos de la contraseña cifrada (codificada en base64) del registro del servidor después del inicio, o usando get-password-data o las solicitudes API correspondientes.

Luego puede decodificar base64 y descifrar el resultado:

base64 -d /tmp/file | openssl rsautl -decrypt -inkey /path/to/aws/private/key.pem

(Las claves privadas de OpenSSH son aceptadas por openssl rsautl).

El problema de no manejar claves protegidas con contraseña con un error útil también afecta el ec2-get-passwordcomando .

Ver también:

Craig Ringer
fuente
1
Gracias. Aquí hay una línea de comando completa que uso, siguiendo sus sugerencias: aws ec2 get-password-data "--instance-id=${instance_id}" | jq -r .PasswordData | base64 -D | openssl rsautl -decrypt -inkey ${my_key} (usa aws-cli y jq ).
Ben Butler-Cole
base64 se queja, -dasí que -Dfunciona para mí. estoy en OS X
Saad Masood
2
En OS X, agregaría un comando más a esa tubería: aws ec2 get-password-data "--instance-id=${instance_id}" | jq -r .PasswordData | base64 -D | openssl rsautl -decrypt -inkey ${my_key} | pbcopy ... que envía la contraseña directamente a su portapapeles.
Mark Maglana
1
Esto debe ser marcado como la respuesta correcta en mi humilde opinión. Como las otras respuestas son un poco inseguras en comparación con esta
webofmars el
4

Sin el uso de jq, esto todavía es posible pero requiere un análisis adicional de los datos devueltos.

aws ec2 get-password-data "--instance-id=${instance_id}" --query 'PasswordData' | sed 's/\"\\r\\n//' | sed 's/\\r\\n\"//' | base64 -D | openssl rsautl -inkey ${my_key} -decrypt
Ben
fuente
Funcionó muy bien, en WSL Ubuntu tuve que usar en base64 -dlugar de -D.
Seth Stone
3

Esto es lo que funcionó para mí en macOS:

openssl rsa -in $HOME/.ssh/aws-remote -out /Users/home/desktop/unencrypted-rsa.txt

Está observando que puede saber si su archivo .pem está cifrado con una contraseña buscando la siguiente línea. Si está presente, debe descifrarlo antes de usarlo con Amazon:

Proc-Type: 4,ENCRYPTED
Django Reinhardt
fuente
Para mí fue la solución. La interfaz de usuario de AWS no detecta que la clave estaba protegida con frase de contraseña y luego debe descifrarla antes. Sin embargo, esto es un poco inseguro. Entonces, elimine el archivo descifrado después.
webofmars
2

En mi Mac, los argumentos de la línea de comandos para base64 son diferentes.

Esto funcionó para mí:

base64 -D -i /tmp/file | openssl rsautl -decrypt -inkey /path/to/key.pem
Dan
fuente
-1
  1. ir al tablero ec2
  2. eliminar la clave existente
  3. crear un nuevo par de claves
  4. escoge un nombre
  5. descárgalo y mantenlo en local
  6. inicie la instancia y descargue su copia de la instancia de Windows
  7. nombra el nuevo par de claves con el nombre usado en el paso 4
  8. use esta clave recién generada para descifrar la contraseña

esto funcionará

Arun Mohan
fuente
1
Sí, funcionará Pero también se pierde el punto: estoy explicando el caso en el que carga una clave local.
Craig Ringer