Instruções passo a passo para recuperar o acesso às instâncias do Linux Amazon EC2 ao perder um arquivo pem

Se durante a criação da instância do Linux na AWS, um par de chaves (KeyPair) não foi criado para acessá-lo via SSH ou eles são perdidos, várias operações devem ser executadas para obter acesso à máquina. Você não pode adicionar chaves a uma instância já em execução pelo console da AWS. Existem três maneiras de restaurar o acesso SSH a uma instância.

A maneira mais fácil é configurar a chave usando o mecanismo cloud-init (obrigado pela dica do yusman ). Mas isso não funcionará se os direitos do diretório /home estiverem danificados ou a distribuição não suportar diretivas de inicialização na nuvem.

A segunda maneira é criar uma imagem (Amazon Machine Image) a partir de uma instância existente e iniciar uma nova instância com base nela, mas com uma chave. Assim, a máquina existente será realmente clonada com a única diferença de que, na última etapa, é possível criar novas chaves. A criação de uma imagem pode levar muito tempo para uma instância com discos grandes, e você precisará configurar todos os serviços vinculados a esta máquina novamente. Portanto, esse método na maioria dos casos levará mais tempo.

Os documentos oficiais da Amazon descrevem outra maneira . Ele permite restaurar o acesso e minimizar o custo de reconfiguração de serviços (em comparação com o segundo método), os quais estão vinculados a uma instância à qual o acesso é perdido. O artigo fornece uma descrição passo a passo.

Atenção! Esse método funciona apenas para instâncias que usam o armazenamento em bloco (Amazon Elastic Block Store) como dispositivo raiz e não funciona para o armazenamento de instância local (Amazon EC2 Instance Store).

Para descobrir que tipo de dispositivo raiz você está usando, abra o console do Amazon EC2, vá para Instâncias , selecione uma instância e verifique o valor do parâmetro Tipo de dispositivo raiz no painel com informações detalhadas.

Tipo de dispositivo raiz da instância

Se sua máquina possui EBS , esse método é adequado para você.

Etapa 1. Preparação


Primeiro, é necessário salvar algumas informações para que você não precise se distrair e não mude para outras telas (principalmente porque isso será muito inconveniente). Todos os dados podem ser encontrados nas informações detalhadas da instância (você já sabe como chegar lá). Registre as seguintes configurações:

  • ID da Instância
  • ID da AMI
  • ID do EBS
  • Dispositivo raiz
  • Zona de disponibilidade

Para uma instância em execução na VPC , salve o valor do ID da VPC .

Para o EC2-classic : se um endereço IP elástico ( Elastic IP ) for criado para uma instância, seu valor também deverá ser salvo.

Configurações da instância a serem salvas
Imagem clicável

Para obter o identificador de armazenamento em bloco ( EBS ID ), clique no nome do dispositivo raiz .

ID do EBS


Etapa 2. Criando uma Instância Temporária


A próxima etapa é criar uma instância com a qual você restaurará as chaves na instância original. Você pode pular esta etapa se tiver outra instância em execução localizada na mesma zona (zona de disponibilidade) que a restaurada e, ao mesmo tempo em que foi criada usando a mesma AMI ou a versão do sistema operacional nela, você poderá conectar o disco a partir da instância original e copie chaves SSH para ele. Se não houver essa instância, faça o seguinte:

  • Vá para o console do EC2 (no painel ou no menu Instâncias ) e clique em Iniciar Instância
  • Na página de seleção AMI ( Escolha uma imagem de máquina da Amazon ), selecione a que foi usada para criar a instância original (você a anotou na primeira etapa - ID da AMI ). Se, por algum motivo, essa AMI não estiver disponível, você poderá criar uma imagem da instância original e usá-la ou selecionar o tipo de AMI à qual pode conectar o disco raiz da instância restaurada.
  • Na página Escolha um tipo de instância , selecione o tipo mais barato disponível.
  • Na página Configurar Detalhes da Instância , especifique a mesma Zona de Disponibilidade da nossa instância. Se estiver em execução na VPC, selecione a mesma VPC no item Rede e especifique a sub-rede nessa zona.

    Configurando a zona de disponibilidade

    No entanto, não há necessidade de alterar as configurações de interfaces de rede.
  • Nenhuma alteração é necessária na página Adicionar Armazenamento .
  • Na página de tags ( Add Tags ), adicione um nome para a instância temporária para facilitar a identificação e não gastar tempo reconciliando o ID da Instância e o EBS , pois nas páginas em que você precisará determinar com qual instância ou volume você está trabalhando, no título esse valor aparecerá.

    Nome na página Adicionar Tags

  • Clique em Revisar e Iniciar e, em seguida, Iniciar
  • O último passo é selecionar um par de chaves existente ou criar um novo. Faça o download do arquivo de chave (pem) e não esqueça de fazer backup para que todas as operações não precisem ser executadas novamente.

    Saving KeyPair
  • Após salvar o arquivo, inicie a instância com o botão Iniciar Instâncias


Etapa 3. Conectando o disco raiz da máquina restaurada a uma instância temporária


Primeiro, você precisa desconectar o disco da instância original e conectá-lo a um temporário. Como esse é o disco raiz, a instância original precisará ser interrompida antes de desconectá-lo.

  • Vá para o console do EC2 na seção Instâncias e selecione a instância original (ela pode ser determinada pelo ID da instância gravado anteriormente ou por um nome diferente daquele que você especificou ao criar a instância temporária).

    Parada da Instância

    Em seguida no menu Ações - Estado da instância - Parar .

    Atenção! Quando a instância para, todos os dados no armazenamento local (Amazon EC2 Instance Store) são apagados. Se você tiver dados sobre esses volumes, cuide da segurança deles transferindo-os para armazenamento permanente, se necessário.
  • Depois que a instância for interrompida, vá para a seção Elastic Block Store - Volumes e selecione o volume raiz da instância original. Pode ser determinado pelo ID do volume armazenado ou com base nas informações da coluna Informações do anexo , que contém o nome da instância.

    Mute drive

    Avançar no menu Ações - Desanexar volume
  • Conecte este volume a uma instância temporária. Para fazer isso, selecione-o novamente e, no menu Ações - Anexar volume, e na caixa de diálogo exibida, especifique sua instância temporária.

    Conexão da unidade

    Depois clique em Anexar . Se a instância original foi criada por meio da AMI do AWS Marketplace e a seção contém códigos do AWS Marketplace, você receberá um erro dizendo que é impossível conectar a seção com códigos a uma instância de trabalho.

    Erro ao conectar a unidade aos códigos do AWS Marketplace

    Nesse caso, pare nossa instância temporária e repita as etapas para conectar o volume raiz da instância original à instância temporária. A segunda tentativa deve ser bem sucedida.
  • Agora você deve ver que as duas unidades estão conectadas a uma instância temporária.

    Ambas as unidades estão conectadas a uma instância temporária
  • Se você parou a instância, execute-a:

    • Vá para a seção Instâncias da barra de navegação.
    • Escolha uma instância temporária
    • Avançar no menu Ações - Estado da Instância - Iniciar .


Etapa 4. Preparando Chaves para Conectar-se à Instância via SSH


Os usuários do Linux não precisam gerar nenhuma chave adicional. Você só precisa conceder permissões de leitura para este arquivo:

chmod 400 my-keypair.pem

Preparação de chave se você estiver executando o Windows
Para conectar-se a uma máquina Linux, usaremos o utilitário PuTTY; portanto, se você não o tiver instalado, faça o download . Para conectar-se via SSH usando-o, você precisará de uma chave ppk , enquanto na AWS, a chave no formato pem foi salva . Para obter a chave no formato desejado, faça o seguinte:

  • Abra o PuTTYgen (instalado com o PuTTY)
  • Selecione 2048 bits nos parâmetros RSA

    RSA 2048 bit
  • Faça o download da chave pem salva clicando em Carregar (Carregar um arquivo de chave privada existente)
  • Especifique a senha (senha da chave ) e confirme-a ( confirme a senha ). Isso não é necessário, mas mais seguro. A única diferença é que, ao conectar usando esta chave, você sempre será solicitado a inserir esta frase para confirmar a entrada
  • Salve o arquivo com o nome que você especificou ao criar o par de chaves ( KeyPair ) durante a criação da instância temporária (o nome coincide com o nome da chave pem )

A chave está pronta.


Etapa 5. Conecte-se a uma instância temporária via SSH


Conecte-se na porta 22 usando a chave O nome de usuário depende de qual AMI foi usada para criar a instância. Você anotou no começo. Os seguintes nomes de usuário são possíveis:

  • Amazon Linux 2 ou Amazon Linux AMI - ec2-user
  • Centos AMI - centos
  • AMI Debian - administrador ou raiz
  • AMI do Fedora - usuário ec2 ou fedora
  • RHEL AMI - usuário ec2 ou root
  • SUSE AMI - usuário ec2 ou root
  • Ubuntu AMI - ubuntu
  • De resto, se os nomes ec2-user e root não funcionarem, entre em contato com o provedor da AMI

O nome do host ao qual você deseja se conectar é user@aws-host.amazon.com , onde user é o nome descrito acima e aws-host.amazon.com é o endereço IP da sua instância, que pode ser encontrado na guia informações detalhadas (nele, você salvou os parâmetros no início). O parâmetro é chamado IPv4 Public IP . Observe que, se você não usar o Elastic IP , sempre que iniciar a instância, ela terá um novo endereço IP.

Instruções de conexão para usuários do Windows
  • Iniciar o PuTTY
  • No campo Nome do host , o endereço está no formato nome de usuário @ endereço IP

    Configure o PuTTY. Nome do host

  • Vá para a seção Conexão - SSH - Auth e faça o download da chave ppk (arquivo de chave privada para autenticação)
  • Clique em Abrir e concorde em confiar no servidor
  • Se você especificou uma senha ao criar uma chave ppk, digite-a para confirmar a entrada:

     Using username "ubuntu". Authenticating with public key "imported-openssh-key" Passphrase for key "imported-openssh-key": 

  • Você está no servidor.

    Login de servidor bem sucedido



Etapa 6. Copiando chaves de uma instância temporária para a original


Monte o volume que você conectou à instância temporária para poder acessar seu sistema de arquivos.

Mount Partition
Por exemplo, se o nome da unidade for /dev/sdf (pode aparecer de maneira diferente na sua instância), use as seguintes operações para montar o volume em /mnt/tempvol :

  • Determine os nomes da partição da unidade mapeada:

    [user ~]$ lsblk

     NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT xvda 202:0 0 10G 0 disk └─xvda1 202:1 0 10G 0 part / xvdf 202:80 0 10G 0 disk └─xvdf1 202:81 0 10G 0 part 

    /dev/xvda1 e /dev/xvdf1 são partições de disco. /dev/xvdf1 não possui um ponto de montagem (MOUNTPOINT), portanto, esta é a partição de disco que conectamos anteriormente.
  • Crie um diretório temporário para montar a partição:

    [user ~]$ sudo mkdir /mnt/tempvol
  • Monte a partição no diretório criado:

    [user ~]$ sudo mount /dev/ xvdf1 /mnt/tempvol


Copie as chaves SSH da instância temporária para a partição montada.

Atenção! Use o nome de usuário fornecido na linha de comando. Isso é necessário porque, apesar de você ter se conectado com êxito a um nome de usuário padrão, que depende do sistema operacional (descrito na etapa 5), ​​na AMI do AWS Marketplace, pode ser diferente após o login. Por exemplo, para o AMI WordPress Certified pela Bitnami, ao efetuar login via SSH, o login padrão para o Ubuntu é o ubuntu . No entanto, o nome de usuário após o login é bitnami

Copiar chaves
Por exemplo, se o nome de usuário for ubuntu , use o seguinte comando para copiar:

[user ~]$ cp .ssh/authorized_keys /mnt/tempvol/home/ ubuntu /.ssh/authorized_keys

Se você não tem permissão para editar os arquivos em /mnt/tempvol , copie os arquivos usando o sudo e verifique os direitos para garantir que você possa acessar a instância original:

  • Verifique as permissões do arquivo:

    [user ~]$ sudo ls -l /mnt/tempvol/home/ ubuntu /.ssh/authorized_keys
    total 4
    -rw------- 1 200 500 392 Aug 15 00:06 authorized_keys

    No exemplo, 200 é o ID do usuário e 500 é o ID do grupo.
  • Reinicie o comando key copy usando o sudo :

    [user ~]$ sudo cp .ssh/authorized_keys /mnt/tempvol/home/ ubuntu /.ssh/authorized_keys

  • Verifique se as permissões no arquivo foram alteradas:

    [user ~]$ sudo ls -l /mnt/tempvol/home/ ubuntu /.ssh/authorized_keys

    Se os direitos foram alterados, restaure-os:

    [user ~]$ sudo chown 200 : 500 /mnt/tempvol/home/ ubuntu /.ssh/authorized_keys


Desmonte a seção:

[user ~]$ sudo umount /mnt/tempvol

Etapa 7. Iniciando a Instância com Acesso Restaurado via SSH


  • No console do EC2, selecione a unidade que você conectou ao temporário e no menu: Ações - Desanexar volume . Aguarde até que o estado do disco fique disponível (você pode usar o botão Atualizar para atualizar as informações).

    Lembre-se de pré-encerrar a instância se a seção contiver códigos do AWS Marketplace.
  • Para a mesma unidade, vá para o menu Ações - Anexar volume
  • Selecione a instância original e especifique o nome do disco raiz que você gravou no início.

    Conexão da unidade
    Imagem clicável

    Clique em Anexar
  • Executar instância
  • Para o EC2-classic : se o Elastic IP foi configurado para a instância original, reassocie-o a ele:

    • Vá para a seção IP elástico da barra de navegação.
    • Selecione o endereço IP elástico que você anotou no início
    • Próximas ações - Endereço associado
    • Selecione o ID da instância original e clique em Associar


Etapa 8. Acesse a Verificação


Conecte-se à instância de acesso restaurado usando a chave gerada.

Se o nome do novo par de chaves for diferente do anterior, verifique se você está se conectando usando a nova chave privada.

Etapa 9. A etapa final


Se você criou uma nova instância temporária para executar todas as operações e não usou uma existente, pare-a se não precisar mais dela:

  • Vá para a seção Instâncias da barra de navegação.
  • Escolha uma instância temporária
  • Avançar no menu Ações - Estado da instância - Terminar

Dessa forma, você recuperou o acesso à instância do Linux Amazon EC2.

Source: https://habr.com/ru/post/pt420297/


All Articles