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.
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.
Imagem clicávelPara obter o identificador de armazenamento em bloco (
EBS ID ), clique no nome do
dispositivo raiz .
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.
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á.
- 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.
- 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).
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.
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.
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.
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.
- 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 WindowsPara 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
- 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 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 PartitionPor 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
:
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 chavesPor 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.
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.