Como baixar chave pública da Amazon AWS?

25

Tenho uma instância do amazon ec2 linux em execução associada a um par de chaves (p1) e baixei a chave privada na minha área de trabalho em casa. Agora no trabalho, criei um par de chaves (p2) na área de trabalho e importei a chave pública para a Amazon por meio do console da AWS.

Em casa, quero adicionar a chave pública do keypair p2 a ser adicionada à authorized_keysminha instância da AMI (que atualmente só posso acessar em casa). No entanto, eu esqueci de trazer a chave pública do p2 comigo, então é possível exportar de alguma forma essa chave pública da Amazon.

Jus12
fonte

Respostas:

6

Bom quebra-cabeça, obrigado! Aqui está uma resposta:

  1. Inicie uma nova instância temporária de inicialização do EBS t1.micro A, especificando o par de chaves p2. Especifique uma zona de disponibilidade em que você já tenha outra instância B em execução e à qual você tem acesso. (Inicie um temporário, se necessário).

  2. Pare (não encerre) a instância A depois que ela estiver no estado de execução por alguns minutos, para que você tenha a chance de salvar a chave pública em seu arquivo allowed_keys.

  3. Desconecte o volume EBS raiz da instância parada A. Anexe e monte-o na sua instância em execução B.

  4. Copie a chave pública do sistema de arquivos montado.

  5. Desconecte e exclua o volume EBS. Encerre a instância temporária A.

Eric Hammond
fonte
1
Não tenho certeza de como isso realmente resolve a questão original ... é definitivamente uma maneira de lidar com instâncias do AWS EC2 se e somente se você estiver usando instâncias apoiadas pelo EBS.
perfil completo de Jeremy Bouse
Você não precisa usar instâncias de inicialização do EBS, exceto pela única vez em que executa a instância temporária para obter a chave pública. Tudo o que você quer fazer é obter a chave pública que essa abordagem faz.
Eric Hammond
1
Se você tiver a chave privada, poderá gerar novamente a chave pública sem executar essas medidas.
precisa
2
Jeremy: Com base na pergunta original, a chave privada está de volta ao seu escritório, onde ele não pode obtê-la. E quando ele volta ao escritório, ele não pode entrar na instância do EC2 porque ela não possui a chave pública para essa chave privada do escritório. É por isso que ele deseja obter a chave pública da Amazon, e a única maneira de fazer isso é iniciar uma instância com essa chave pública. Então você precisa tirar a chave pública dessa instância, que é a parte complicada.
Eric Hammond
1
Uau! muito trabalho para obter a chave pública. Teria sido mais fácil para a Amazon colocar uma opção "Exportar chave pública".
Jus12
37

O comando ssh-keygen correto é, no entanto:

ssh-keygen -y -f /path/to/privatekey > /path/to/publickey
rsmoorthy
fonte
Este deve ser um comentário ou edição proposta na resposta anterior. Você está correto.
precisa saber é o seguinte
Você está certo, isso deveria ter sido um comentário. Infelizmente, ainda não ganhei o privilégio de comentar :-(
rsmoorthy 13/01/12
haha, bem, lá vai você. Obrigado por concordar com a correção.
precisa saber é
Essa resposta funcionaria se ele tivesse acesso à chave privada, mas na pergunta original, essa chave privada está em um local diferente e não acessível.
Eric Hammond
1
execute chmod 400 your_private_key.pemse você receber "Permissões estão muito abertas"
crizCraig
7

Eu já forneci uma resposta que usa volumes EBS para obter a chave pública ssh, mas aqui está outra maneira de obter isso iniciando uma instância temporária do EC2 com um script de dados do usuário que envia a chave pública à saída do console. Aqui estão os passos:

Salve o código a seguir em um arquivo nomeado output-ssh-key.userdatano seu computador local. NÃO EXECUTE ESTES COMANDOS LOCALMENTE!

#!/bin/bash -ex
exec> >(tee /var/log/user-data.log|logger -t user -s 2>/dev/console) 2>&1
adminkey=$(GET instance-data/latest/meta-data/public-keys/ | 
  perl -ne 'print $1 if /^0=[^a-z0-9]*([-.@\w]*)/i')
cat <<EOF
SSHKEY:========================================================================
SSHKEY:HERE IS YOUR PUBLIC SSH KEY FOR KEYPAIR "$adminkey":
SSHKEY:$(cat /home/ubuntu/.ssh/authorized_keys)
SSHKEY:========================================================================
SSHKEY:Halting in 50min ($(date --date='+50 minutes' +"%Y-%m-%d %H:%M UTC"))
EOF
sleep 3000
halt

Execute uma instância LTS do Ubuntu 10.04 com o arquivo acima como um script de dados do usuário. Especifique o par de chaves para o qual deseja recuperar a chave pública ssh:

ec2-run-instances \
  --key YOURKEYPAIRHERE \
  --instance-type t1.micro \
  --instance-initiated-shutdown-behavior terminate \
  --user-data-file output-ssh-key.userdata \
  ami-ab36fbc2

Continue solicitando a saída do console da instância até que ela mostre sua chave pública ssh. Especifique o ID da instância retornado do comando run-instance:

ec2-get-console-output YOURINSTANCEID | grep SSHKEY: | cut -f3- -d:

Dentro de 2 a 10 minutos, você obterá uma saída como esta:

========================================================================
HERE IS YOUR PUBLIC SSH KEY FOR KEYPAIR "erich":
ssh-rsa AAAAB3NzaC1yc2EAAAABIwAAAQEA6rn8cl41CkzaH4ZBhczOJZaR4xBBDI1Kelc2ivzVvCB
THcdJRWpDd5I5hY5W9qke9Tm4fH3KaUVndlcP0ORGvS3PAL4lTpkS4D4goMEFrwMO8BG0NoE8sf2U/7g
aUkdcrDC7jzKYdwleRCI3uibNXiSdeG6RotClAAp7pMflDVp5WjjECDZ+8Jzs2wasdTwQYPhiWSiNcfb
fS97QdtROf0AcoPWElZAgmabaDFBlvvzcqxQRjNp/zbpkFHZBSKp+Sm4+WsRuLu6TDe9lb2Ps0xvBp1F
THlJRUVKP2yeZbVioKnOsXcjLfoJ9TEL7EMnPYinBMIE3kAYw3FzZZFeX3Q== erich
========================================================================
Halting in 50min (2011-12-20 05:58 UTC)

A instância temporária será encerrada automaticamente em menos de uma hora, mas você pode finalizá-la você mesmo se quiser ter certeza de que não cobra mais do que os dois centavos que isso custará para ser executado.

Eric Hammond
fonte
Eu tentei isso com uma instalação moderna do awscli e funcionou com o script de dados do usuário. No entanto, tive que adaptar ligeiramente os comandos. Isso funcionou para a região eu-west-1: aws ec2 run-instance --key-name mykey --instance-type t1.micro --instance-initiated-shutdown-behavior terminate --user-data file: // output- ssh-key.userdata - id da imagem ami-c1167eb8; aws ec2 get-console-output - id de instância i-0ce56c0e02086160d; instâncias de encerramento do aws ec2 --instance-id i-0ce56c0e02086160d
holmb
(Editado) Ok, a formatação é horrível aqui, vou postar como resposta diferente.
Bernhard
5

Se você tiver a chave SSH privada, poderá gerar novamente o componente de chave pública simplesmente executando o seguinte comando ssh-keygen :

 ssh-keygen -i -f /path/to/private-key > /path/to/public-key

Essa é a parte mais simples ... O console e a API da AWS não oferecem suporte ao envio de 2 pares de chaves ao iniciar uma instância do EC2. Este é um exercício deixado para o administrador do sistema fazer por outros meios.

Se você tiver acesso à chave de identidade já autorizada, poderá simplesmente executar o seguinte comando ssh-copy-id :

 ssh-copy-id -i /path/to/public-key user@EC2-instance

Isso copiará a chave pública fornecida para o servidor e para o ~user/.ssh/authorized_keysarquivo automaticamente e garantirá as permissões apropriadas no arquivo.

A maneira mais elegante seria incluir as chaves de identidade adicionais em seus processos de gerenciamento de configuração. No meu caso, isso implica adicionar chaves adicionais à configuração do Puppet para o nó.

Como observação lateral, a preferência pessoal, mas utilizaria um método de gerenciamento de chaves SSH melhor do que simplesmente incluir chaves separadas para o local de trabalho e de casa. Como mencionei em uma pergunta anterior , mantenho minhas chaves em uma unidade USB que mantenho comigo em vez de em qualquer computador que utilizo.

Jeremy Bouse
fonte
0

Outra opção seria adicionar um script curto no user_data que apenas adiciona outra chave ssh ao root:

#!/bin/bash

touch ~/.ssh/authorized_keys
chmod 400 ~/.ssh/authorized_keys

echo "<KEY>" >> ~/.ssh/authorized_keys

Em seguida, você pode efetuar login na máquina como root ssh -l root -i <KEYFILE> URLe ler a chave em optional_keys do usuário ec2_user, ubuntu ou como ele é chamado.

A única coisa - você precisa tornar a máquina acessível ao público e garantir que o acesso à porta 22 seja possível a partir do exterior.

Bernhard
fonte