Como posso configurar o acesso ao console de série do EC2 de uma instância Linux inacessível?

9 minuto de leitura
0

Minha instância Linux do Amazon Elastic Compute Cloud (Amazon EC2) está inacessível. Eu não configurei o acesso ao console de série do EC2 no nível do sistema operacional.

Breve descrição

Para configurar o acesso ao console serial, faça o seguinte:

1.    Acesse o volume raiz da instância.

2.    Defina a senha para o usuário raiz ou qualquer outro usuário do sistema operacional.

3.    Verifique e atualize as configurações do GRUB para o console serial.

Observação: você pode pular a etapa 3 se o console serial EC2 estiver funcionando corretamente na instância afetada e você só precisar definir a senha para o usuário do sistema operacional.

Pré-requisitos

Para usar o console serial, verifique se você atendeu aos pré-requisitos, exceto Definir uma senha de usuário do sistema operacional. A definição de uma senha é discutida na resolução a seguir.

Resolução

Acesse o volume raiz da instância usando uma instância de resgate

Crie uma instância de resgate temporária e, em seguida, remonte seu volume do Amazon Elastic Block Store (Amazon EBS) na instância de resgate. Na instância de resgate, você pode verificar e modificar as configurações do GRUB para o console serial. Você também pode definir a senha para o usuário raiz ou qualquer outro usuário do sistema operacional.

Importante: não execute esse procedimento em uma instância com armazenamento de instâncias. Como o procedimento de recuperação exige a parada e o início da instância, todos os dados dessa instância são perdidos. Para obter mais informações, consulte Determinar o tipo de dispositivo raiz da sua instância.

1.    Crie um snapshot do EBS do volume raiz. Para obter mais informações, acesse Criar snapshots do Amazon EBS.

2.    Abra o console do Amazon EC2.

**Observação:**Verifique se você está na região correta.

3.    Escolha Instâncias no painel de navegação e selecione a instância danificada.

4.    Escolha Estado da instância, Interromper instância e selecione Parar.

5.    Na guia Armazenamento, em Bloquear dispositivos, selecione o ID do volume para /dev/sda1 ou /dev/xvda.

Observação: o dispositivo raiz difere de acordo com a AMI, mas /dev/xvda ou /dev/sda1 são reservados para o dispositivo raiz. Por exemplo, o Amazon Linux 1 e 2 usam /dev/xvda. Outras distribuições, como Ubuntu 16, 18, CentOS 7 e RHEL 7.5, usam /dev/sda1.

6.    Escolha Ações, Desanexar volume e, em seguida, selecione Sim, desanexar. Observe a zona de disponibilidade.

Observação: você pode marcar o volume do EBS antes de desanexá-lo para ajudar a identificá-lo em etapas posteriores.

7.    Execute uma instância EC2 de resgate na mesma zona de disponibilidade.

Observação: dependendo do código do produto, talvez seja necessário iniciar uma instância EC2 do mesmo tipo de sistema operacional. Por exemplo, se a instância do EC2 comprometida for uma AMI RHEL paga, você deverá iniciar uma AMI com o mesmo código de produto. Para obter mais informações, consulte Obter o código do produto para sua instância.

Se a instância original estiver executando o SELinux (RHEL, CentOS 7 ou 8, por exemplo), execute a instância de resgate a partir de uma AMI que usa o SELinux. Se você selecionar uma AMI executando um sistema operacional diferente, como o Amazon Linux 2, qualquer arquivo modificado na instância original terá rótulos SELinux quebrados.

8.    Depois que a instância de resgate for iniciada, escolha Volumes no painel de navegação e escolha o volume raiz desanexado da instância comprometida.

9.    Escolha Ações, Anexar volume.

10.    Escolha o ID da instância de resgate (id-xxxxx) e defina um dispositivo não utilizado. Neste exemplo, /dev/sdf.

11.     Use o SSH para se conectar à instância de resgate.

12.    Execute o comando lsblk para visualizar seus dispositivos de disco disponíveis:

lsblk

Veja a seguir um exemplo da saída:

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

Observação: as instâncias baseadas em Nitro expõem os volumes do EBS como dispositivos de bloco NVMe. A saída gerada pelo comando lsblk em instâncias baseadas em Nitro mostra os nomes dos discos como nvme[0-26]n1. Para obter mais informações, consulte Amazon EBS e NVMe em instâncias Linux. Veja a seguir um exemplo da saída do comando lsblk em uma instância baseada em Nitro:

NAME           MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
nvme0n1        259:0    0    8G  0 disk
└─nvme0n1p1    259:1    0    8G  0 part /
└─nvme0n1p128  259:2    0    1M  0 part
nvme1n1        259:3    0  100G  0 disk
└─nvme1n1p1    259:4    0  100G  0 part /

13.    Execute o comando a seguir para se tornar raiz:

sudo -i

14.    Monte a partição raiz do volume montado em /mnt. No exemplo anterior, /dev/xvdf1 ou /dev/nvme2n1p2 é a partição raiz do volume montado. Para obter mais informações, consulte Disponibilizar um volume do Amazon EBS para uso no Windows.

Observação: no exemplo a seguir, substitua /dev/xvdf1 pela partição raiz correta para seu volume.

mount -o nouuid /dev/xvdf1 /mnt

Observação: se /mnt não existir em sua configuração, crie um diretório de montagem e, em seguida, monte a partição raiz do volume montado nesse novo diretório.

mkdir /mnt
mount -o nouuid /dev/xvdf1 /mnt

Agora você pode acessar os dados da instância comprometida por meio do diretório de montagem.

15.    Monte /dev, /run, **/proc ** e /sys da instância de resgate nos mesmos caminhos do volume recém-montado:

for m in dev proc run sys; do mount -o bind {,/mnt}/$m; done

Chame a função chroot para mudar para o diretório de montagem.

Observação: se você tiver partições /boot e /etc separadas, monte-as em /mnt/boot e /mnt/etc antes de executar o comando a seguir.

chroot /mnt

Defina a senha para o usuário raiz ou qualquer outro usuário do sistema operacional.

Use o comando passwd para definir a senha do usuário do sistema operacional. No exemplo a seguir, o usuário é root:

passwd root

Verifique e atualize as configurações do GRUB para o console serial.

Observação: você pode pular essa etapa se o console serial do EC2 estiver funcionando corretamente na instância afetada e você só precisar definir a senha para o usuário do sistema operacional.

A porta de console serial suportada para Linux é ttyS0. Se a tela permanecer preta sem fornecer nenhuma saída ao se conectar ao console serial do EC2, verifique se a entrada do console está configurada corretamente nas configurações do GRUB. Os exemplos fornecidos abaixo foram retirados das AMIs do AWS Marketplace para as diferentes distribuições nas quais o console serial está funcionando corretamente:

GRUB2 para Amazon Linux 2, RHEL e CentOS 7

1.    Verifique se a entrada do console para o ttyS0 está configurada corretamente na linha GRUB_CMDLINE_LINUX\ _DEFAULT do arquivo /etc/default/grub:

Amazon Linux 2

GRUB_CMDLINE_LINUX_DEFAULT="console=tty0 console=ttyS0,115200n8 net.ifnames=0 biosdevname=0 nvme_core.io_timeout=4294967295 rd.emergency=poweroff rd.shell=0"

RHEL 7

GRUB_CMDLINE_LINUX="console=ttyS0,115200n8 console=tty0 net.ifnames=0 rd.blacklist=nouveau crashkernel=auto"

CentOS 7

GRUB_CMDLINE_LINUX="console=tty0 crashkernel=auto net.ifnames=0 console=ttyS0"

2.    Se a entrada do console para o ttyS0 não estiver definida, adicione-a na linha GRUB\ _CMDLINE\ _LINUX_DEFAULT. Em seguida, atualize o GRUB para gerar o arquivo /boot/grub2/grub.cfg novamente:

grub2-mkconfig -o /boot/grub2/grub.cfg

GRUB1 (GRUB legado) para Red Hat 6 e Amazon Linux 1

1.    Verifique se a entrada do console para o ttyS0 está configurada corretamente na linha do kernel do arquivo /boot/grub/grub.conf:

Amazon Linux 1

kernel /boot/vmlinuz-4.14.252-131.483.amzn1.x86_64 root=LABEL=/ console=tty1 console=ttyS0 selinux=0 nvme_core.io_timeout=4294967295

Red Hat 6

kernel /boot/vmlinuz-2.6.32-573.el6.x86_64 console=ttyS0 console=ttyS0,115200n8 ro root=UUID=0e6b1614-7bbe-4d6e-bc78-a5556a123ba8 rd_NO_LUKS  KEYBOARDTYPE=pc KEYTABLE=us LANG=en_US.UTF-8 xen_blkfront.sda_is_xvda=1 console=tty0 rd_NO_MD SYSFONT=latarcyrheb-sun16 crashkernel=auto rd_NO_LVM rd_NO_DM

2.    Se a entrada do console para o ttyS0 não estiver definida, adicione-a ao arquivo /boot/grub/grub.conf de acordo com os exemplos anteriores.

GRUB2 para Ubuntu 16.04, 18.04 e 20.04

1.    Verifique se a entrada do console para o ttyS0 está configurada corretamente na linha GRUB_CMDLINE_LINUX\ _DEFAULT do arquivo /etc/default/grub.d/50-cloudimg-settings.cfg:

GRUB_CMDLINE_LINUX_DEFAULT="console=tty1 console=ttyS0 nvme_core.io_timeout=4294967295"

2.    Se a entrada do console console=ttyS0 não estiver presente**,** adicione-a na linha GRUB\ _CMDLINE_LINUX\ _DEFAULT. Em seguida, atualize a configuração do GRUB usando o seguinte comando:

update-grub

**GRUB2 para RHEL 8, CentOS 8 e Amazon Linux 2023
**

1.    Execute o comando grubby --default-kernel para ver o kernel padrão atual:

grubby --default-kernel

2.    Execute o comando grubby --info=ALL para ver todos os kernels disponíveis, seus índices e seus argumentos:

grubby --info=ALL

3.    Verifique se a entrada do console para o ttyS0 está configurada corretamente na linha args do kernel padrão descrito na etapa 1.

RHEL 8

index=0
kernel="/boot/vmlinuz-4.18.0-305.el8.x86_64"
args="ro console=ttyS0,115200n8 console=tty0 net.ifnames=0 rd.blacklist=nouveau nvme_core.io_timeout=4294967295 crashkernel=auto $tuned_params"
root="UUID=d35fe619-1d06-4ace-9fe3-169baad3e421"
initrd="/boot/initramfs-4.18.0-305.el8.x86_64.img $tuned_initrd"
title="Red Hat Enterprise Linux (4.18.0-305.el8.x86_64) 8.4 (Ootpa)"
id="0c75beb2b6ca4d78b335e92f0002b619-4.18.0-305.el8.x86_64"

CentOS 8

index=2
kernel="/boot/vmlinuz-4.18.0-193.19.1.el8_2.x86_64"
args="ro console=ttyS0,115200n8 no_timer_check net.ifnames=0 nvme_core.io_timeout=4294967295 nvme_core.max_retries=10 crashkernel=auto $tuned_params"
root="UUID=b437cbaa-8fe5-49e4-8537-0895c219037a"
initrd="/boot/initramfs-4.18.0-193.19.1.el8_2.x86_64.img $tuned_initrd"
title="CentOS Linux (4.18.0-193.19.1.el8_2.x86_64) 8 (Core)"
id="dc49529e359897df0b9664481b009b1f-4.18.0-193.19.1.el8_2.x86_64"

Amazon Linux 2023

[root@ip-172-31-92-173 ~]# grubby --info DEFAULTindex=0
kernel="/boot/vmlinuz-6.1.15-28.43.amzn2023.x86_64"
Acessing serial console on Amazon Linux 2023
root="UUID=7efef47b-a4f8-4b90-9504-8196067a31b6"
initrd="/boot/initramfs-6.1.15-28.43.amzn2023.x86_64.img"
title="Amazon Linux (6.1.15-28.43.amzn2023.x86_64) 2023"
id="02c860b8daad4861b87f9b3603834c8f-6.1.15-28.43.amzn2023.x86_64"

4.    Se a entrada do console para o ttyS0 não estiver definida, use o seguinte comando grubby para anexá-la aos args do kernel padrão:

grubby --args "console=tty0 console=ttyS0,115200n8" --update-kernel DEFAULT

Desmonte e desconecte o volume raiz da instância de resgate e, em seguida, conecte o volume à instância comprometida

1.    Saia do chroot e desmonte /dev, /run, /proc e /sys:

exit
umount /mnt/{dev,proc,run,sys,}

2.    No console do Amazon EC2, escolha Instâncias e, em seguida, escolha a instância de resgate.

3.    Escolha Estado da instância, Interromper instância e, em seguida, selecione Sim, interromper.

4.    Separe o volume raiz **id-xxxxx ** (o volume da instância comprometida) da instância de resgate.

5.    Anexe o volume raiz que você desconectou na etapa 4 à instância comprometida como volume raiz (/dev/sda1) e, em seguida, inicie a instância.

Observação: o dispositivo raiz difere de acordo com a AMI. Os nomes /dev/xvda ou /dev/sda1 são reservados para o dispositivo raiz. Por exemplo, o Amazon Linux 1 e 2 usam /dev/xvda. Outras distribuições, como Ubuntu 16, 18, CentOS 7 e RHEL 7.5, usam /dev/sda1.

Agora você pode acessar o sistema operacional da instância comprometida por meio do Console de Série do EC2 usando a senha definida na etapa anterior para o usuário raiz ou qualquer outro usuário do sistema operacional.

Informações relacionadas

Solucione problemas na sua instância Linux usando GRUB

AWS OFICIAL
AWS OFICIALAtualizada há 2 anos