¿Cómo puedo configurar el acceso a la consola serie de EC2 de una instancia de Linux inalcanzable o inaccesible?

9 minutos de lectura
0

Mi instancia de Linux de Amazon Elastic Compute Cloud (Amazon EC2) es inalcanzable o inaccesible. No configuré el acceso a la consola serie de EC2 en el nivel del sistema operativo.

Breve descripción

Para configurar el acceso a la consola serie, siga estos pasos:

1.    Acceda al volumen raíz de la instancia.

2.    Establezca la contraseña para el usuario raíz o cualquier otro usuario del sistema operativo.

3.    Compruebe y actualice la configuración de GRUB para la consola serie.

Nota: Puede omitir el paso 3 si la consola serie de EC2 funciona correctamente en la instancia afectada y solo necesita establecer la contraseña del usuario del sistema operativo.

Requisitos previos

Para utilizar la consola serie, asegúrese de cumplir los requisitos previos, excepto Establecer una contraseña de usuario de sistema operativo. El establecimiento de una contraseña se explica en la solución siguiente.

Solución

Acceso al volumen raíz de la instancia mediante una instancia de rescate

Cree una instancia de rescate temporal y, a continuación, vuelva a montar su volumen de Amazon Elastic Block Store (Amazon EBS) en la instancia de rescate. Desde la instancia de rescate, puede comprobar y modificar la configuración de GRUB para la consola serie. También puede establecer la contraseña para el usuario raíz o cualquier otro usuario del sistema operativo.

Importante: No realice este procedimiento en una instancia respaldada por un almacén de instancias. Dado que el procedimiento de recuperación requiere detener e iniciar la instancia, se perderán todos los datos de esa instancia. Para obtener más información, consulte Determinar el tipo de dispositivo raíz de la instancia.

1.    Cree una instantánea de EBS del volumen raíz. Para obtener más información, consulte Crear instantáneas de Amazon EBS.

2.    Abra la consola de Amazon EC2.

Nota: Asegúrese de estar en la región correcta.

3.    Elija Instancias en el panel de navegación y, a continuación, seleccione la instancia deteriorada.

4.    Elija Estado de instancia, Detener instancia y, a continuación, seleccione Detener.

5.    En la pestaña Almacenamiento, en Dispositivos de bloques, seleccione el ID de volumen para /dev/sda1 o /dev/xvda.

Nota: El dispositivo raíz varía según la AMI, pero /dev/xvda o /dev/sda1 están reservados para el dispositivo raíz. Por ejemplo, Amazon Linux 1 y 2 utilizan /dev/xvda. Otras distribuciones, como Ubuntu 16, 18, CentOS 7 y RHEL 7.5, utilizan /dev/sda1.

6.    Elija ** Acciones**, Desconectar volumen y, a continuación, seleccione Sí, desconectar. Tenga en cuenta la zona de disponibilidad.

Nota: Puede etiquetar el volumen de EBS antes de desconectarlo para poder identificarlo en los pasos posteriores.

7.    Lance una instancia de EC2 de rescate en la misma zona de disponibilidad.

Nota: Dependiendo del código de producto, es posible que deba lanzar una instancia de EC2 del mismo tipo que el sistema operativo. Por ejemplo, si la instancia de EC2 deteriorada es una AMI de RHEL de pago, deberá lanzar una AMI con el mismo código de producto. Para obtener más información, consulte Obtener el código de producto de una instancia.

Si la instancia original ejecuta SELinux (RHEL, CentOS 7 u 8, por ejemplo), lance la instancia de rescate desde una AMI que utilice SELinux. Si selecciona una AMI que ejecute un sistema operativo diferente, como Amazon Linux 2, los archivos modificados en la instancia original no tendrán las etiquetas de SELinux.

8.    Tras lanzar la instancia de rescate, seleccione Volúmenes en el panel de navegación y, a continuación, seleccione el volumen raíz desconectado de la instancia deteriorada.

9.    Elija Acciones, Asociar volumen.

10.    Elija el ID de la instancia de rescate (id-xxxxx) y, a continuación, configure un dispositivo no utilizado. En este ejemplo, /dev/sdf.

11.     Use SSH para conectarse a la instancia de rescate.

12.    Ejecute el comando lsblk para ver los dispositivos de disco disponibles:

lsblk

A continuación se muestra un ejemplo del resultado:

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

Nota: Las instancias basadas en Nitro exponen los volúmenes de EBS como dispositivos de bloques NVMe. El resultado generado por el comando lsblk en las instancias basadas en Nitro muestra los nombres de los discos como nvme[0-26]n1. Para obtener más información, consulte Amazon EBS y NVMe en instancias de Linux. A continuación, se muestra un ejemplo del resultado del comando lsblk en una instancia basada en 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.    Ejecute el siguiente comando para convertirse en usuario raíz:

sudo -i

14.    Monte la partición raíz del volumen montado en /mnt. En el ejemplo anterior, /dev/xvdf1 o /dev/nvme2n1p2 es la partición raíz del volumen montado. Para obtener más información, consulte Hacer que un volumen de Amazon EBS esté disponible para su uso en Linux.

Nota: En el siguiente ejemplo, sustituya /dev/xvdf1 por la partición raíz correcta de su volumen.

mount -o nouuid /dev/xvdf1 /mnt

Nota: Si /mnt no existe en su configuración, cree un directorio de montaje y, a continuación, monte la partición raíz del volumen montado en este nuevo directorio.

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

Ahora podrá acceder a los datos de la instancia deteriorada a través del directorio de montaje.

15.    Monte /dev, /run, /proc y /sys de la instancia de rescate en las mismas rutas que el volumen recién montado:

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

Llame a la función chroot para cambiar al directorio de montaje.

Nota: Si tiene particiones /boot y /etc independientes, móntelas en /mnt/boot y /mnt/etc antes de ejecutar el siguiente comando.

chroot /mnt

Establezca la contraseña para el usuario raíz o cualquier otro usuario del sistema operativo.

Use el comando passwd para establecer la contraseña del usuario del sistema operativo. En el siguiente ejemplo, se trata del usuario raíz:

passwd root

Compruebe y actualice la configuración de GRUB para la consola serie.

Nota: Puede omitir este paso si la consola serie de EC2 funciona correctamente en la instancia afectada y solo necesita establecer la contraseña del usuario del sistema operativo.

El puerto de la consola serie compatible con Linux es ttyS0. Si la pantalla permanece en negro sin proporcionar ningún resultado cuando se conecta a la consola serie de EC2, asegúrese de que la entrada console esté configurada correctamente en la configuración de GRUB. Los ejemplos que se proporcionan a continuación se han obtenido de las AMI de AWS Marketplace para las diferentes distribuciones en las que la consola serie funciona correctamente:

GRUB2 para Amazon Linux 2, RHEL y CentOS 7

1.    Compruebe que la entrada console para ttyS0 esté configurada correctamente en la línea GRUB_CMDLINE_LINUX_DEFAULT del archivo /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.    Si no se ha configurado la entrada de la consola para ttyS0, agréguela en la línea GRUB_CMDLINE_LINUX_DEFAULT. A continuación, actualice GRUB para volver a generar el archivo**/boot/grub2/grub.cfg**:

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

GRUB1 (GRUB heredado) para Red Hat 6 y Amazon Linux 1

1.    Compruebe que la entrada console para ttyS0 esté configurada correctamente en la línea kernel del archivo /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.    Si no se ha configurado la entrada de la consola para ttyS0, agréguela al archivo /boot/grub/grub.conf como en los ejemplos anteriores.

GRUB2 para Ubuntu 16.04, 18.04 y 20.04

1.    Compruebe que la entrada console para ttyS0 esté configurada correctamente en la línea GRUB_CMDLINE_LINUX_DEFAULT del archivo /etc/default/grub.d/50-cloudimg-settings.cfg:

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

2.    Si la entrada de la consola console=ttyS0 no está presente**,** agréguela en la línea GRUB_CMDLINE_LINUX_DEFAULT. A continuación, actualice la configuración de GRUB mediante el siguiente comando:

update-grub

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

1.    Ejecute el comando grubby --default-kernel para ver el kernel predeterminado actual:

grubby --default-kernel

2.    Ejecute el comando grubby --info=ALL para ver todos los kernels disponibles, sus índices y sus argumentos:

grubby --info=ALL

3.    Compruebe que la entrada console para ttyS0 esté configurada correctamente en la línea args del kernel predeterminado indicado en el paso 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.    Si no se ha configurado la entrada de la consola para ttyS0, utilice el siguiente comando grubby para añadirla a args en el kernel predeterminado:

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

Desmontaje y desconexión del volumen raíz de la instancia de rescate, y posterior asociación del volumen a la instancia deteriorada

1.    Salga de chroot y desmonte /dev, /run, /proc y /sys:

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

2.    En la consola de Amazon EC2, elija Instancias y, a continuación, elija la instancia de rescate.

3.    Elija Estado de instancia, Detener instancia y, a continuación, seleccione Sí, detener.

4.    Desconecte el volumen raíz id-xxxxx (el volumen de la instancia deteriorada) respecto a la instancia de rescate.

5.    Conecte el volumen raíz desconectado en el paso 4 a la instancia deteriorada como volumen raíz (/dev/sda1) y, a continuación, inicie la instancia.

Nota: El dispositivo raíz varía según la AMI. Los nombres /dev/xvda o /dev/sda1 están reservados para el dispositivo raíz. Por ejemplo, Amazon Linux 1 y 2 utilizan /dev/xvda. Otras distribuciones, como Ubuntu 16, 18, CentOS 7 y RHEL 7.5, utilizan /dev/sda1.

Ahora puede acceder al sistema operativo de la instancia deteriorada mediante la consola serie de EC2 con la contraseña definida en el paso anterior para el usuario raíz o cualquier otro usuario del sistema operativo.

Información relacionada

Solucionar problemas de su instancia de Linux mediante GRUB

OFICIAL DE AWS
OFICIAL DE AWSActualizada hace 2 años