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

Última actualización: 22/03/2022

Mi instancia de Linux de Amazon Elastic Compute Cloud (Amazon EC2) se encuentra en un estado inalcanzable o inaccesible. No configuré el acceso a la consola serie de EC2 en el nivel del sistema operativo. ¿Cómo puedo modificar las configuraciones del sistema operativo en la consola serie de EC2 y establecer la contraseña de manera que cualquier usuario del sistema operativo acceda a la instancia?

Descripción breve

Para configurar el acceso a la consola serie, haga lo siguiente:

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

2.    Establezca la contraseña del usuario raíz o de 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 de forma adecuada en la instancia afectada y solo debe establecer la contraseña para el usuario del sistema operativo.

Requisitos previos

Para usar la consola serie, asegúrese de cumplir los requisitos previos, excepto para establecer una contraseña de usuario de sistema operativo. El proceso para establecer una contraseña se explica en la siguiente resolución.

Resolución

Acceder 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 el 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 lleve a cabo este procedimiento en una instancia respaldada por el almacén de instancias. Como el procedimiento de recuperación requiere la detención y el inicio de la instancia, se perderán todos los datos en 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.    Seleccione Instances (Instancias) en el panel de navegación y, a continuación, elija la instancia dañada.

4.    Elija Instance State (Estado de la instancia), Stop instance (Detener instancia) y, a continuación, seleccione Stop (Detener).

5.    En la pestaña Storage (Almacenamiento), en Block devices (Dispositivos de bloques), seleccione el Volume ID (ID del volumen) de /dev/sda1 o /dev/xvda.

Nota: El dispositivo raíz difiere 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 Actions (Acciones), Detach Volume (Desconectar el volumen) y, a continuación, seleccione Yes, Detach (Sí, desconectar). Tenga en cuenta la zona de disponibilidad.

Nota: Puede etiquetar el volumen de EBS antes de desconectarlo para colaborar con su identificación en pasos posteriores.

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

Nota: Según el código de producto, es posible que deba lanzar una instancia de EC2 con el mismo tipo de sistema operativo. Por ejemplo, si la instancia de EC2 dañada es una AMI de RHEL que requiere pago, debe 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 a partir de una AMI que use SELinux. Si selecciona una AMI que ejecuta un sistema operativo diferente, como Amazon Linux 2, cualquier archivo modificado en la instancia original tendrá etiquetas de SELinux que no funcionan.

8.    Después de lanzar la instancia de rescate, elija Volumes (Volúmenes) en el panel de navegación y, a continuación, elija el volumen raíz desconectado de la instancia dañada.

9.    Elija Actions (Acciones) y Attach Volume (Adjuntar volumen).

10.    Elija el ID de la instancia de rescate (id-xxxxx) y, luego, establezca un dispositivo sin usar. 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 de lo que se obtiene:

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 a los volúmenes de EBS como dispositivos de bloques NVMe. La salida generada por el comando lsblk en 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 de la salida 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 son 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, reemplace /dev/xvdf1 por la partición raíz correcta del 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, puede acceder a los datos de la instancia dañada 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

Establecer la contraseña del usuario raíz o de cualquier otro usuario del sistema operativo

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

passwd root

Comprobar y actualizar la configuración de GRUB para la consola serie

Nota: Puede omitir este paso si la consola serie de EC2 funciona de forma adecuada en la instancia afectada y solo debe establecer la contraseña para el usuario del sistema operativo.

El puerto de la consola serie compatible con Linux es ttyS0. Si la pantalla permanece en negro sin proporcionar ninguna salida al conectarse a la consola serie de EC2, debería asegurarse de que la entrada de la consola esté configurada correctamente en la configuración de GRUB. Los ejemplos que se proporcionan a continuación se sacan de las AMI de AWS Marketplace para las diferentes distribuciones en las cuales la consola serie funciona correctamente:

GRUB2 para Amazon Linux 2, RHEL y CentOS 7

1.    Verifique que la entrada de la consola 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 la entrada de la consola para ttyS0 no está configurada, 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.    Verifique que la entrada de la consola para ttyS0 esté configurada correctamente en la línea de 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 la entrada de la consola para ttyS0 no está configurada, agréguela en el archivo /boot/grub/grub.conf de acuerdo con los ejemplos anteriores.

GRUB2 para Ubuntu 16.04, 18.04 y 20.04

1.    Verifique que la entrada de la consola 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 con el siguiente comando:

update-grub

GRUB2 para RHEL 8 y CentOS 8

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.    Verifique que la entrada de la consola para ttyS0 esté configurada correctamente en la línea args para el kernel predeterminado que se describió 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"

4.    Si la entrada de la consola para ttyS0 no está configurada, use el siguiente comando grubby para anexarlo a los argumentos del kernel predeterminado:

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

Desmontar y desconectar el volumen raíz de la instancia de rescate y, a continuación, adjuntar el volumen a la instancia dañada

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 Instances (Instancias) y, a continuación, elija la instancia de rescate.

3.    Elija Instance State (Estado de la instancia), Stop instance (Detener instancia) y, a continuación, seleccione Yes, Stop (Sí, detener).

4.    Desconecte el volumen raíz id-xxxxx (el volumen de la instancia dañada) de la instancia de rescate.

5.    Adjunte el volumen raíz que desconectó en el paso 4 a la instancia dañada como el volumen raíz (/dev/sda1) y, a continuación, inicie la instancia.

Nota: El dispositivo raíz difiere 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 dañada a través de 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.


¿Le resultó útil este artículo?


¿Necesita asistencia técnica o con la facturación?