Le mot de passe Windows ne sera pas décrypté sur AWS EC2 même avec la bonne clé privée

21

J'ai créé une nouvelle instance Windows sur AWS EC2, en utilisant une paire de clés que j'ai créée en téléchargeant ma clé publique depuis ma machine locale.

L'instance s'est bien lancée, mais elle ne décryptera pas le mot de passe. Il rapporte:

La clé privée doit commencer par "----- COMMENCER LA CLÉ PRIVÉE RSA -----" et se terminer par "----- FIN LA CLÉ PRIVÉE RSA -----"

Je suis certain d'avoir téléchargé la bonne clé. J'ai vérifié que les empreintes digitales correspondent au format étrange des empreintes digitales qu'AWS utilise . Mais il ne se décryptera tout simplement pas.

J'ai essayé de télécharger le fichier clé et de le coller dans le formulaire.

J'ai finalement compris qu'il ne supprime pas la nouvelle ligne de fin et j'ai supprimé la ligne vierge de la clé. Cela m'amène juste à une nouvelle erreur lorsque je clique sur "Décrypter le mot de passe", cependant:

Une erreur s'est produite lors du décryptage de votre mot de passe.  Veuillez vous assurer que vous avez correctement saisi votre clé privée.

Craig Ringer
la source

Réponses:

22

La gestion des clés d'AWS EC2 ne prend pas en charge les clés privées SSH dont les mots de passe sont définis (sont chiffrés). Il ne détecte pas cela et échoue simplement avec une erreur non informative.

Si votre clé privée est stockée cryptée sur le disque (comme elle devrait l'être, IMO), vous devez la décrypter pour la coller dans la console d'AWS.

Plutôt que de le faire, pensez à décrypter le mot de passe localement, afin de ne pas avoir à envoyer votre clé privée à AWS. Obtenez les données de mot de passe chiffrées (encodées en base64) à partir du journal du serveur après le démarrage, ou en utilisant get-password-data ou les demandes d'API correspondantes.

Vous pouvez ensuite décoder et déchiffrer le résultat en base64:

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

(Les clés privées OpenSSH sont acceptées par openssl rsautl).

Le problème lié à l'échec de la gestion des clés protégées par mot de passe avec une erreur utile affecte également la ec2-get-passwordcommande .

Voir également:

Craig Ringer
la source
1
Merci. Voici une ligne de commande complète que j'utilise, suivant vos suggestions: aws ec2 get-password-data "--instance-id=${instance_id}" | jq -r .PasswordData | base64 -D | openssl rsautl -decrypt -inkey ${my_key} (utilise aws-cli et jq ).
Ben Butler-Cole
base64 se plaint -ddonc -Dfonctionne pour moi. im sur OS X
Saad Masood
2
Sous OS X, j'ajouterais une autre commande à ce canal: aws ec2 get-password-data "--instance-id=${instance_id}" | jq -r .PasswordData | base64 -D | openssl rsautl -decrypt -inkey ${my_key} | pbcopy ... qui envoie le mot de passe directement à votre presse-papiers.
Mark Maglana
1
Cela devrait être marqué comme la bonne réponse à mon humble avis. Comme les autres réponses sont un peu précaires par rapport à celle-ci
webofmars
4

Sans l'utilisation de jq, cela est toujours possible mais nécessite une analyse supplémentaire des données renvoyées.

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
la source
A très bien fonctionné, sur WSL Ubuntu, j'ai dû utiliser base64 -dplutôt que -D.
Seth Stone
3

C'est ce qui a fonctionné pour moi sous macOS:

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

Il est à noter que vous pouvez savoir si votre fichier .pem est chiffré avec un mot de passe en recherchant la ligne suivante. S'il est présent, vous devez le déchiffrer avant de l'utiliser avec Amazon:

Proc-Type: 4,ENCRYPTED
Django Reinhardt
la source
Pour moi, c'était la solution. L'interface utilisateur AWS ne détecte pas que la clé était protégée par une phrase secrète et vous devez ensuite la déchiffrer avant. C'est une sorte d'insécurité cependant. Supprimez donc le fichier déchiffré par la suite.
webofmars
2

Sur mon Mac, les arguments de ligne de commande pour base64 sont différents.

Cela a fonctionné pour moi:

base64 -D -i /tmp/file | openssl rsautl -decrypt -inkey /path/to/key.pem
Dan
la source
-1
  1. aller au tableau de bord ec2
  2. supprimer la clé existante
  3. créer une nouvelle paire de clés
  4. choisissez un nom
  5. téléchargez et conservez-le en local
  6. lancer l'instance et télécharger votre copie de l'instance Windows
  7. nommez la nouvelle paire de clés avec le nom utilisé à l'étape 4
  8. utiliser cette clé nouvellement générée pour déchiffrer le mot de passe

cela fonctionnera

Arun Mohan
la source
1
Oui, ça marchera. Mais cela manque également le point - j'explique le cas où vous téléchargez une clé locale.
Craig Ringer