¿Cómo accedo a la consola serie de EC2 de una instancia de Linux inalcanzable o inaccesible?

8 minutos de lectura
0

Mi instancia de Linux de Amazon Elastic Compute Cloud (Amazon EC2) es inalcanzable o inaccesible. Además, no he configurado el acceso a la consola serie de EC2 en el nivel del sistema operativo.

Descripción breve

Este artículo es aplicable a los siguientes sistemas operativos (SO) Linux:

  • Red Hat 7 - 9
  • Amazon Linux 2, 2023
  • CentOS 7, 8
  • Rocky Linux 8, 9
  • Ubuntu 16 - 24
  • Debian 9 - 12

Requisitos previos: Para utilizar la consola serie, asegúrate de cumplir todos los requisitos previos. Ten en cuenta que el paso de establecer una contraseña de usuario del sistema operativo debe completarse después de acceder al volumen raíz de la instancia.

Resolución

Para configurar el acceso a la consola serie, se deben completar los pasos siguientes.

Nota: Si la consola serie de EC2 funciona correctamente y solo tienes que establecer la contraseña para el usuario del sistema operativo, completa únicamente ese paso de resolución. Para comprobar que la consola serie de EC2 funciona, consulta Conectar a la consola serie de EC2.

Acceso al volumen raíz de la instancia

Para acceder al volumen raíz de la instancia, lanza una instancia temporal. A continuación, vuelve a montar el volumen de Amazon Elastic Block Store (Amazon EBS) en la instancia de rescate. A continuación, desde la instancia de rescate, comprueba y modifica la configuración de GRUB para la consola serie. También puedes establecer la contraseña para el usuario raíz o el usuario del sistema operativo y permitir el acceso de raíz para el daemon SSH.

Importante: Cuando configures una instancia temporal, ten en cuenta lo siguiente:

Conexión del disco raíz a una instancia de rescate

Sigue estos pasos:

  1. Crea un nuevo par de claves o utiliza un par de claves existente.

  2. Obtén el ID del volumen y el nombre del dispositivo del volumen raíz de la instancia original.

  3. Detén la instancia original.

  4. Lanza una instancia temporal desde una imagen de máquina de Amazon (AMI) con la misma versión del sistema operativo Linux en la misma zona de disponibilidad.

  5. Separa el volumen raíz de la instancia original y adjúntalo a la instancia temporal como volumen secundario. Anota el nombre del dispositivo de volumen.

  6. Conéctate a la instancia temporal con tu par de claves SSH.

  7. Para cambiar al usuario raíz, ejecuta el siguiente comando:

    [ec2-user ~]$ sudo su
  8. Para identificar la partición y el nombre del dispositivo de bloques, ejecuta el siguiente comando desde la instancia temporal:

    [root ~]$ lsblk
    NAME    MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
    xvda    202:0    0    8G  0 disk
    └─xvda1 202:1    0    8G  0 part /
    xvdf    202:80   0  101G  0 disk
    └─xvdf1 202:81   0  101G  0 part

    El ejemplo anterior usa una instancia XEN con controladores de blockfront. Los dos nombres de dispositivo de volumen /dev/xvda y /dev/xvdf son volúmenes particionados, pero /dev/xvdg no. Si el volumen está particionado, ejecuta el siguiente comando para montar la partición (/dev/xvdf1) en lugar del dispositivo sin procesar (/dev/xvdf):

    [root ~]$ mount -o nouuid /dev/xvdf1 /mnt

    Si usas una instancia basada en Nitro, el nombre del dispositivo del volumen es similar a /dev/nvme[0-26]n1. Si la instancia se ha creado en Nitro con NVMe, monta la partición en el directorio /mnt. Usa el nombre del dispositivo que identificaste anteriormente para ejecutar el siguiente comando:

    [root ~]$ mount -o nouuid  /dev/nvme1n1p1 /mnt

    Para obtener más información, consulta Nombres de dispositivos para volúmenes en instancias de Amazon EC2.

  9. Para crear un entorno chroot en el directorio /mnt, ejecuta el siguiente comando:

    [root ~]$ for i in dev proc sys run; do mount -o bind /$i /mnt/$i; done; chroot /mnt

    En el ejemplo anterior, los directorios /dev, /proc, /sys y /run se montan mediante enlaces desde el sistema de archivos raíz original. Esta configuración permite que los procesos que se ejecutan dentro del entorno chroot accedan a estos directorios del sistema.

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

En chroot, usa el comando passwd para establecer la contraseña del usuario del sistema operativo y permitir el acceso de raíz en la configuración de SSH.

En el siguiente ejemplo, se trata del usuario raíz. Puedes establecer una contraseña raíz con el siguiente comando:

[root ~]$ passwd root

Para configurar el permiso del acceso raíz al daemon SSH (sshd) en Linux, cambia #PermitRootLogin yes a PermitRootLogin yes, ejecuta el siguiente código:

[root ~]$ sed -i 's/#\?PermitRootLogin .*/PermitRootLogin yes/' /etc/ssh/sshd_config

Cómo pasar los parámetros del kernel al gestor de arranque GRUB

Para enviar todos los resultados de la consola al puerto serie, se deben pasar los siguientes parámetros del kernel console=tty0 console=ttyS0,115200 al gestor de arranque GRUB.

Nota: Los valores tty0 y ttyS0 contienen un cero y no la letra O.

En la lista siguiente se muestran las opciones seleccionadas para este ejemplo:

  • console= es un parámetro del kernel que especifica el dispositivo de consola preferido para los mensajes del kernel.
  • tty0 hace referencia a la primera consola virtual (modo texto) del sistema.
  • ttyS0 hace referencia al primer puerto serie.
  • 115200 es la frecuencia en baudios (bits por segundo) del puerto serie. Se trata de una frecuencia en baudios común que se utiliza para la comunicación en serie.
  • n8 especifica el tamaño de los caracteres y la configuración de paridad para el puerto serie. n significa sin paridad. 8 muestra que el tamaño de los caracteres es de 8 bits.
  • El parámetro tty0 activa el kernel para enviar mensajes de consola a la primera consola virtual (tty0). Esa suele ser la consola principal en modo texto en los sistemas Linux.
  • El parámetro ttyS0 configura el kernel para enviar mensajes de consola al primer puerto serie (ttyS0). Los mensajes se envían a una frecuencia de 115 200 baudios sin paridad y con 8 bits por carácter.

Comprobación y actualización de la configuración de GRUB2 para la consola serie

Añade los parámetros del kernel console=tty0 y console=ttyS0,115200 a la línea GRUB_CMDLINE_LINUX_DEFAULT del archivo /etc/default/grub

Sigue estos pasos:

  1. Abre el archivo /etc/default/grub con un editor de texto en chroot. Por ejemplo, para usar el editor nano o vi, ejecuta uno de los siguientes comandos:

    [root ~]$ nano /etc/default/grub
    [root ~]$ vi /etc/default/grub
  2. Busca la línea que comienza con GRUB_CMDLINE_LINUX_DEFAULT. La línea tiene un aspecto similar al siguiente:

    GRUB_CMDLINE_LINUX_DEFAULT="quiet splash"
  3. Añade los parámetros del kernel console=tty0 y console=ttyS0,115200 a esta línea. Introduce un espacio para separar estos parámetros del kernel de los parámetros actuales. La línea actualizada tiene un aspecto similar al siguiente:

    GRUB_CMDLINE_LINUX_DEFAULT="quiet splash console=tty0 console=ttyS0,115200"
  4. Guarda los cambios y sal del editor de texto.

  5. Para actualizar la configuración de GRUB, ejecuta el siguiente comando:

    Para Red Hat, CentOS, Amazon Linux y Rocky Linux

    En máquinas basadas en BIOS:

    [root ~]$ grub2-mkconfig -o /boot/grub2/grub.cfg

    En máquinas basadas en UEFI:

    [root ~]$ grub2-mkconfig -o /boot/efi/EFI/redhat/grub.cfg

    Para Ubuntu y Debian

    El siguiente comando regenera el archivo de configuración de GRUB con los nuevos parámetros del kernel.

    [root ~]$ update-grub
  6. Para salir de chroot y desmontar /dev**, /run, /proc y **/sys, ejecuta el siguiente comando:

    [root ~]$ exit; umount -fl /mnt/{dev,proc,run,sys,}
  7. En la consola de Amazon EC2, selecciona Instancias y, a continuación, elige la instancia de rescate.

  8. Elige Estado de instancia, Detener instancia y, a continuación, selecciona Sí, detener.

  9. Desconecta el volumen raíz id-##### (el volumen de la instancia deteriorada) respecto a la instancia de rescate.

  10. Adjunta el volumen raíz a la instancia deteriorada como volumen raíz (/dev/sda1) y, a continuación, inicia la instancia.

  11. Utiliza el cliente basado en navegador para conectarte a la consola serie de la instancia de EC2.

  12. Inicia sesión con el usuario como raíz y la contraseña que se estableció anteriormente.

OFICIAL DE AWS
OFICIAL DE AWSActualizada hace 6 meses