A senha do Windows não descriptografará no AWS EC2, mesmo com a chave privada correta

21

Criei uma nova instância do Windows no AWS EC2, usando um par de chaves criado por meio do upload da minha chave pública da máquina local.

A instância foi lançada corretamente, mas não descriptografará a senha. Relata:

A chave privada deve começar com "----- BEGIN RSA PRIVATE KEY -----" e terminar com "----- END RSA PRIVATE KEY -----"

Estou certo de que carreguei a chave correta. Eu verifiquei que as impressões digitais correspondem ao formato estranho de impressão digital que a AWS usa . Mas isso simplesmente não descriptografa.

Tentei fazer o upload do arquivo-chave e colá-lo no formulário.

Acabei descobrindo que não está retirando a nova linha à direita e excluí a linha em branco da chave. Isso me leva a um novo erro quando clico em "Descriptografar senha", no entanto:

Ocorreu um erro ao descriptografar sua senha.  Verifique se você digitou sua chave privada corretamente.

Craig Ringer
fonte

Respostas:

22

O gerenciamento de chaves do AWS EC2 não lida com chaves privadas SSH que possuem senhas definidas (são criptografadas). Ele não detecta isso e simplesmente falha com um erro não informativo.

Se sua chave privada estiver armazenada criptografada em disco (como deveria ser, IMO), você deverá descriptografá-la para colá-la no console da AWS.

Em vez de fazer isso, considere descriptografar a senha localmente, para que você não precise enviar sua chave privada à AWS. Obtenha os dados da senha criptografada (codificada em base64) do log do servidor após a inicialização ou use get-password-data ou as solicitações de API correspondentes.

Você pode decodificar o base64 e descriptografar o resultado:

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

(As chaves privadas do OpenSSH são aceitas por openssl rsautl).

O problema de falha ao manipular chaves protegidas por senha com um erro útil também afeta o ec2-get-passwordcomando .

Veja também:

Craig Ringer
fonte
11
Obrigado. Aqui está uma linha de comando completa que eu uso, seguindo suas sugestões: aws ec2 get-password-data "--instance-id=${instance_id}" | jq -r .PasswordData | base64 -D | openssl rsautl -decrypt -inkey ${my_key} (usa aws-cli e jq ).
Ben Butler-Cole
base64 reclama sobre -disso -Dfunciona para mim. im no OS X
Saad Masood
2
No OS X, eu adicionaria mais um comando ao canal: aws ec2 get-password-data "--instance-id=${instance_id}" | jq -r .PasswordData | base64 -D | openssl rsautl -decrypt -inkey ${my_key} | pbcopy ... que envia a senha diretamente para a área de transferência.
Mark Maglana
11
Isso deve ser marcado como a resposta correta IMHO. Uma vez que os outros responder são um pouco inseguro em relação a este
webofmars
4

Sem o uso de jq, isso ainda é possível, mas requer uma análise adicional dos dados retornados.

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
fonte
Funcionou muito bem, no WSL Ubuntu eu tive que usar em base64 -dvez de -D.
Seth Stone
3

Isto é o que funcionou para mim no macOS:

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

É importante notar que você pode saber se o arquivo .pem está criptografado com uma senha, procurando a seguinte linha. Se estiver presente, você precisará descriptografá-lo antes de usá-lo com a Amazon:

Proc-Type: 4,ENCRYPTED
Django Reinhardt
fonte
Para mim, foi a solução. A interface do usuário da AWS não detecta que a chave foi protegida por senha e, em seguida, você precisa descriptografá-la antes. Isso é meio inseguro. Portanto, remova o arquivo descriptografado posteriormente.
Webofmars
2

No meu Mac, os argumentos da linha de comando para base64 são diferentes.

Isso funcionou para mim:

base64 -D -i /tmp/file | openssl rsautl -decrypt -inkey /path/to/key.pem
Dan
fonte
-1
  1. vá para o painel ec2
  2. excluir a chave existente
  3. crie um novo par de chaves
  4. escolha um nome
  5. faça o download e mantenha-o no local
  6. iniciar instância e baixar sua cópia da instância do Windows
  7. nomeie o novo par de chaves com o nome usado na etapa 4
  8. use essa chave recém-gerada para descriptografar a senha

isso vai funcionar

Arun Mohan
fonte
11
Sim, vai funcionar. Mas isso também erra o ponto - estou explicando o caso em que você carrega uma chave local.
Craig Ringer