Adicionar par de chaves à instância existente do EC2


240

Recebi acesso do AWS Console a uma conta com duas instâncias em execução que não consigo desligar (em produção). No entanto, gostaria de obter acesso SSH a essas instâncias, é possível criar um novo par de chaves e aplicá-lo às instâncias para que eu possa fazer o SSH? A obtenção do arquivo pem existente para o par de chaves em que as instâncias foram criadas atualmente não é uma opção.

Se isso não for possível, existe alguma outra maneira de entrar nas instâncias?


Você já tentou a solução aqui: stackoverflow.com/questions/1454629/… ? ssh-adddeve fazer o que você precisa.
— Marc Bollinger

É bom aprender o recurso ssh-add, mas isso não ajuda, porque esse usuário realmente criou a instância usando o par de chaves que ele criou. As instâncias às quais me refiro foram criadas com outro par de chaves às quais não tenho acesso.
— Chris Wagner

1
Talvez seja melhor você fazer esta pergunta em serverfault.com
— Claude Vedovini

4
Você não pode aplicar um par de chaves a uma instância em execução.
— Rodney Quillo

Respostas:


172

Você não pode aplicar um par de chaves a uma instância em execução. Você só pode usar o novo par de chaves para iniciar uma nova instância.

Para recuperação, se for uma AMI de inicialização do EBS, você pode interrompê-lo e fazer uma captura instantânea do volume. Crie um novo volume com base nele. E use-o novamente para iniciar a instância antiga, criar uma nova imagem ou recuperar dados.

Embora os dados no armazenamento efêmero sejam perdidos.


Devido à popularidade desta pergunta e resposta, eu queria capturar as informações no link que Rodney postou em seu comentário.

Crédito para Eric Hammond por esta informação .

Corrigindo arquivos no volume EBS raiz de uma instância do EC2

Você pode examinar e editar arquivos no volume raiz do EBS em uma instância do EC2, mesmo se estiver em uma situação desastrosa como:

  • Você perdeu sua chave ssh ou esqueceu sua senha
  • Você cometeu um erro ao editar o arquivo / etc / sudoers e não pode mais obter acesso root com o sudo para corrigi-lo
  • Sua instância de longa execução está travada por algum motivo, não pode ser contatada e falha ao inicializar corretamente
  • Você precisa recuperar arquivos da instância, mas não pode acessá-la

Em um computador físico à sua mesa, você pode simplesmente inicializar o sistema com um CD ou pendrive, montar o disco rígido, fazer o check-out e corrigir os arquivos e, em seguida, reiniciar o computador para voltar aos negócios.

Uma instância remota do EC2, no entanto, parece distante e inacessível quando você está em uma dessas situações. Felizmente, a AWS nos fornece o poder e a flexibilidade para recuperar um sistema como esse, desde que executemos instâncias de inicialização do EBS e não armazenemos a instância.

A abordagem no EC2 é um pouco semelhante à solução física, mas vamos mover e montar o “disco rígido” defeituoso (volume EBS raiz) em uma instância diferente, corrigi-lo e movê-lo de volta.

Em algumas situações, pode ser mais fácil simplesmente iniciar uma nova instância do EC2 e jogar fora a ruim, mas se você realmente deseja corrigir seus arquivos, aqui está a abordagem que funcionou para muitos:

Configuração

Identifique a instância original (A) e o volume que contém o volume EBS raiz quebrado com os arquivos que você deseja exibir e editar.

instance_a=i-XXXXXXXX

volume=$(ec2-describe-instances $instance_a |
  egrep '^BLOCKDEVICE./dev/sda1' | cut -f3)

Identifique a segunda instância do EC2 (B) que você usará para corrigir os arquivos no volume EBS original. Esta instância deve estar em execução na mesma zona de disponibilidade da instância A para que possa ter o volume EBS anexado a ela. Se você ainda não possui uma instância em execução, inicie uma temporária.

instance_b=i-YYYYYYYY

Interrompa a instância quebrada A (aguardando a parada completa), desanexe o volume EBS raiz da instância (aguardando a desanexação) e, em seguida, conecte o volume à instância B em um dispositivo não utilizado.

ec2-stop-instances $instance_a
ec2-detach-volume $volume
ec2-attach-volume --instance $instance_b --device /dev/sdj $volume

ssh na instância B e monte o volume para que você possa acessar seu sistema de arquivos.

ssh ...instance b...

sudo mkdir -p 000 /vol-a
sudo mount /dev/sdj /vol-a

Consertá-lo

Nesse ponto, todo o seu sistema de arquivos raiz da instância A está disponível para visualização e edição em / vol-a na instância B. Por exemplo, você pode:

  • Coloque as chaves ssh corretas em /vol-a/home/ubuntu/.ssh/authorized_keys
  • Edite e corrija / vol-a / etc / sudoers
  • Procure mensagens de erro em / vol-a / var / log / syslog
  • Copie arquivos importantes de / vol-a /…

Nota: Os uids nas duas instâncias podem não ser idênticos; portanto, tenha cuidado se estiver criando, editando ou copiando arquivos que pertencem a usuários não raiz. Por exemplo, seu usuário mysql na instância A pode ter o mesmo UID que o usuário postfix na instância B, o que pode causar problemas se você exibir arquivos com um nome e depois mover o volume de volta para A.

Embrulhar

Depois de terminar e ficar satisfeito com os arquivos em / vol-a, desmonte o sistema de arquivos (ainda na instância-B):

sudo umount /vol-a
sudo rmdir /vol-a

Agora, de volta ao seu sistema com ec2-api-tools, continue movendo o volume EBS de volta para o seu país na instância original A e inicie a instância novamente:

ec2-detach-volume $volume
ec2-attach-volume --instance $instance_a --device /dev/sda1 $volume
ec2-start-instances $instance_a

Felizmente, você resolveu o problema, a instância A aparece perfeitamente e você pode realizar o que originalmente se propôs a fazer. Caso contrário, talvez seja necessário continuar repetindo essas etapas até que funcione.

Nota: Se você tiver um endereço IP Elastic atribuído à instância A quando o interrompeu, precisará reassociá-lo depois de iniciá-lo novamente.

Lembrar! Se sua instância B foi temporariamente iniciada apenas para esse processo, não se esqueça de encerrá-la agora.


você pode nos dizer um guia passo a passo para isso (ou apontar para ele). No meu caso, eu tenho uma instância em execução e preciso fazer login a partir de um local remoto, onde não tenho a chave privada.
— Jus12

87

Embora você não possa adicionar um par de chaves diretamente a uma instância do EC2 em execução, você pode criar um usuário linux e criar um novo par de chaves para ele, e usá-lo como faria com o par de chaves do usuário original.

No seu caso, você pode solicitar ao proprietário da instância (quem a criou) que faça o seguinte. Portanto, o proprietário da instância não precisa compartilhar suas próprias chaves com você, mas você ainda poderá fazer o ssh nessas instâncias. Essas etapas foram originalmente publicadas por Utkarsh Sengar (também conhecido como @zengr ) em http://utkarshsengar.com/2011/01/manage-multiple-accounts-on-1-amazon-ec2-instance/ . Fiz apenas algumas pequenas alterações.

  1. Etapa 1: faça o login por usuário "ubuntu" padrão :

    $ ssh -i my_orig_key.pem ubuntu@111.111.11.111
    
  2. Etapa 2: crie um novo usuário, chamaremos nosso novo usuário de "john" :

    [ubuntu@ip-11-111-111-111 ~]$ sudo adduser john
    

    Defina a senha para "john":

    [ubuntu@ip-11-111-111-111 ~]$ sudo su -
    [root@ip-11-111-111-111 ubuntu]# passwd john
    

    Adicione "john" à lista de sudoer por:

    [root@ip-11-111-111-111 ubuntu]# visudo
    

    .. e adicione o seguinte ao final do arquivo:

    john   ALL = (ALL)    ALL
    

    Tudo bem! Nós criamos nosso novo usuário, agora você precisa gerar o arquivo de chave que será necessário para efetuar login, como temos my_orin_key.pem na Etapa 1.

    Agora, saia e volte ao ubuntu, fora da raiz.

    [root@ip-11-111-111-111 ubuntu]# exit
    [ubuntu@ip-11-111-111-111 ~]$
    
  3. Etapa 3: criando as chaves públicas e privadas :

    [ubuntu@ip-11-111-111-111 ~]$ su john
    

    Digite a senha que você criou para "john" na Etapa 2. Em seguida, crie um par de chaves. Lembre-se de que a senha para o par de chaves deve ter pelo menos 4 caracteres.

    [john@ip-11-111-111-111 ubuntu]$ cd /home/john/
    [john@ip-11-111-111-111 ~]$ ssh-keygen -b 1024 -f john -t dsa
    [john@ip-11-111-111-111 ~]$ mkdir .ssh
    [john@ip-11-111-111-111 ~]$ chmod 700 .ssh
    [john@ip-11-111-111-111 ~]$ cat john.pub > .ssh/authorized_keys
    [john@ip-11-111-111-111 ~]$ chmod 600 .ssh/authorized_keys
    [john@ip-11-111-111-111 ~]$ sudo chown john:ubuntu .ssh
    

    Na etapa acima, john é o usuário que criamos e o ubuntu é o grupo de usuários padrão.

    [john@ip-11-111-111-111 ~]$ sudo chown john:ubuntu .ssh/authorized_keys
    
  4. Passo 4: agora você só precisa baixar a chave chamada "john" . Eu uso o scp para baixar / fazer upload de arquivos do EC2, aqui está como você pode fazê-lo.

    Você ainda precisará copiar o arquivo usando o usuário ubuntu , pois você só tem a chave para esse nome de usuário. Então, você precisará mover a chave para a pasta ubuntu e chmod para 777.

    [john@ip-11-111-111-111 ~]$ sudo cp john /home/ubuntu/
    [john@ip-11-111-111-111 ~]$ sudo chmod 777 /home/ubuntu/john
    

    Agora vá ao terminal da máquina local, onde você tem o arquivo my_orig_key.pem e faça o seguinte:

    $ cd ~/.ssh
    $ scp -i my_orig_key.pem ubuntu@111.111.11.111:/home/ubuntu/john john
    

    O comando acima copiará a chave "john" para o diretório de trabalho atual em sua máquina local. Depois de copiar a chave para sua máquina local, você deve excluir "/ home / ubuntu / john", pois é uma chave privada.

    Agora, um da sua máquina local chmod john para 600.

    $ chmod 600 john
    
  5. Etapa 5: hora de testar sua chave :

    $ ssh -i john john@111.111.11.111
    

Portanto, dessa maneira, você pode configurar vários usuários para usar uma instância do EC2 !!


4
Isso é útil, mas, como etapa final, você também não deve excluir a chave privada da máquina remota? Dessa forma, outras pessoas com acesso à instância também não pode copiá-lo e usar sua chave para entrar.
— culix

Isso funciona para mim. Mas como navego para o usuário do ubuntu a partir daqui, já que os arquivos nos quais trabalharei estão no diretório do usuário do ubuntu. Isso me levará ao grupo de usuários john. Ubuntu 14.04.4 LTS
— olyjosh

Isso não funcionou para mim. Deu permissões inválidas. Eu tive que criar um par de chaves do console ec2, em seguida, ele começou a trabalhar
— dark knight

11

Na sua máquina local, execute o comando:

ssh-keygen -t rsa -C "SomeAlias"

Após a execução desse comando, um arquivo que termina em * .pub será gerado. Copie o conteúdo desse arquivo.

Na máquina Amazon, edite ~ / .ssh / allowed_keys e cole o conteúdo do arquivo * .pub (e remova primeiro qualquer conteúdo existente).

Em seguida, você pode SSH usando o outro arquivo que foi gerado a partir do comando ssh-keygen (a chave privada).


Assim como o @Dan mencionou, é possível alterar o acesso à sua instância editando este arquivo, mas você nunca poderá alterar o par de chaves associado à instância em um nível de metadados. Não esqueça de adicionar o nome do arquivo .pem no final do seu publicKey, ex:ssh-rsa AAAAB3NzaC1yc2EA...DsGt66 my-key-pair
— Ricardo Mutti

7

Isso aconteceu comigo mais cedo (não tinha acesso a uma instância do EC2 que alguém criou, mas tinha acesso ao console da web da AWS) e escrevi a resposta em blog: http://readystate4.com/2013/04/09/aws-gaining- ssh-acesso-a-uma-ec2-instância-você-perdeu-acesso-a /

Basicamente, você pode desconectar a unidade EBS, conectá-la a um EC2 ao qual você tem acesso. Adicione sua chave pub SSH a ~ec2-user/.ssh/authorized_keysesta unidade conectada. Em seguida, coloque-o novamente na antiga instância do EC2. passo a passo no link usando o Amazon AMI.

Não há necessidade de fazer instantâneos ou criar uma nova instância clonada.


6

No meu caso, usei esta documentação para associar um par de chaves à minha instância do Elastic Beanstalk

Importante

Você deve criar um par de chaves do Amazon EC2 e configurar suas instâncias do Amazon EC2 aprovadas pelo Elastic Beanstalk para usar o par de chaves do Amazon EC2 antes de poder acessar suas instâncias do Amazon EC2 aprovadas pelo Elastic Beanstalk. Você pode configurar seus pares de chaves do Amazon EC2 usando o AWS Management Console. Para obter instruções sobre como criar um par de chaves para o Amazon EC2, consulte o Guia de introdução do Amazon Elastic Compute Cloud.

Configurando instâncias do servidor Amazon EC2 com Elastic Beanstalk


1
Obrigado, @ kamal-essajidi! Para outras pessoas que usam EB: depois de ter um par de chaves, você pode adicioná-lo ao Elastic Beanstalk em Configuração> Instâncias> Par de chaves EC2.
— Scott

4

Você pode adicionar uma nova chave à instância usando o seguinte comando:

ssh-copy-id -i ~/.ssh/id_rsa.pub domain_alias

Você pode configurar domain_alias em ~ / .ssh config

host domain_alias
  User ubuntu
  Hostname domain.com
  IdentityFile ~/.ssh/ec2.pem

4

Não achei uma maneira fácil de adicionar um novo par de chaves pelo console, mas você pode fazer isso manualmente.

Basta colocar ssh na sua caixa do EC2 com o par de chaves existente. Depois edite as teclas ~ / .ssh / allowed_keys e adicione a nova chave em uma nova linha. Saia e ssh através da nova máquina. Sucesso!



3

Para ambientes Elasticbeanstalk, você pode aplicar um par de valores-chave a uma instância em execução como esta:

  • Crie um par de valores-chave em EC2 -> Pares de chaves (na guia REDE E SEGURANÇA)
  • Vá para Elasticbeanstalk e clique no seu aplicativo
  • Vá para a página de configuração e modifique as configurações de segurança
  • Escolha seu par de chaves EC2 e clique em Aplicar
  • Clique em confirmar para confirmar a atualização. Ele encerrará o ambiente e aplicará o valor da chave ao seu ambiente.

1

Você pode realmente adicionar um par de chaves na página de configuração do beanstalk elástico. Ele reinicia sua instância para você e tudo funciona.

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.