Comment configurer l'accès à la EC2 Serial Console d'une instance Linux inaccessible ?

Lecture de 9 minute(s)
0

Mon instance Linux Amazon Elastic Compute Cloud (Amazon EC2) est inaccessible. Je n'ai pas configuré l'accès à la EC2 Serial Console au niveau du système d'exploitation.

Brève description

Pour configurer l'accès à la console série, procédez comme suit :

1.    Accédez au volume racine de l'instance.

2.    Définissez le mot de passe de l'utilisateur root ou de tout autre utilisateur du système d'exploitation.

3.    Vérifiez et mettez à jour les paramètres GRUB de la console série.

Remarque : vous pouvez ignorer l'étape 3 si la EC2 Serial Console fonctionne correctement sur l'instance concernée ; il vous suffit alors de définir le mot de passe de l'utilisateur de votre système d'exploitation.

Prérequis

Pour pouvoir utiliser la console série, vous devez remplir les prérequis, à l'exception de la section Définir un mot de passe utilisateur de système d'exploitation. La définition du mot de passe sera en effet abordée ci-dessous.

Résolution

Accès au volume racine de l'instance à l'aide d'une instance de secours

Créez une instance de secours temporaire, puis remontez votre volume Amazon Elastic Block Store (Amazon EBS) sur celle-ci. À partir l'instance de secours, vous pouvez vérifier et modifier les paramètres GRUB de la console série. Vous pouvez également définir le mot de passe de l'utilisateur root ou de tout autre utilisateur du système d'exploitation.

Important : cette procédure ne doit pas être effectuée sur une instance basée sur le stockage d'instance. Comme la procédure de restauration nécessite l'arrêt et le démarrage de votre instance, toutes les données se trouvant sur cette instance seront en effet perdues. Pour en savoir plus, consultez la section Déterminer le type de périphérique racine de votre instance.

1.    Créez un instantané EBS du volume racine. Pour en savoir plus, consultez la section Créer des instantanés Amazon EBS.

2.    Ouvrez la console Amazon EC2.

Remarque : vérifiez que vous êtes dans la bonne région.

3.    Choisissez Instances dans le volet de navigation, puis sélectionnez l’instance affectée.

4.    Choisissez État de l’instance, Arrêter l’instance, puis sélectionnez Arrêter.

5.    Dans l'onglet Stockage, sousPériphériques de stockage en mode bloc, sélectionnez l'ID de volume pour /dev/sda1 ou /dev/xvda.

Remarque : le périphérique racine varie selon l'AMI, mais /dev/xvda ou /dev/sda1 sont réservés au périphérique racine. Par exemple, Amazon Linux 1 et 2 utilisent /dev/xvda. D'autres distributions, telles qu'Ubuntu 16, 18, CentOS 7 et RHEL 7.5, utilisent /dev/sda1.

6.    Choisissez Actions, Détacher un volume, puis sélectionnez Oui, détacher. Notez la zone de disponibilité.

Remarque : vous pouvez étiqueter le volume EBS avant de le détacher afin de pouvoir l'identifier ultérieurement.

7.    Lancez une instance EC2 de secours dans la même zone de disponibilité.

Remarque : selon le code produit, il est possible que vous deviez lancer une instance EC2 du même type de système d'exploitation. Par exemple, si l'instance EC2 affectée est une AMI RHEL payante, vous devez lancer une AMI avec le même code produit. Pour en savoir plus, consultez la section Obtenir le code produit pour votre instance.

Si l'instance d'origine exécute SELinux (RHEL, CentOS 7 ou 8, par exemple), lancez l'instance de secours depuis une AMI qui utilise SELinux. Si vous sélectionnez une AMI exécutant un autre système d'exploitation, comme Amazon Linux 2, les étiquettes SELinux de tout fichier modifié sur l'instance d'origine seront rompues.

8.    Une fois l’instance de secours lancée, choisissez Volumes dans le volet de navigation, puis sélectionnez le volume racine détaché de l’instance affectée.

9.    Choisissez Actions, puis Attacher un volume.

10.    Choisissez l'ID de l'instance de secours (id-xxxxx), puis définissez un périphérique inutilisé. Dans cet exemple, il s’agit de /dev/sdf.

11.     Utilisez le protocole SSH pour vous connecter à l’instance de secours.

12.    Exécutez la commande lsblk pour afficher les unités de disque disponibles :

lsblk

Voici un exemple de sortie :

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

Remarque : les instances basées sur Nitro exposent les volumes EBS en tant que périphériques de stockage en mode bloc NVMe. La sortie générée par la commande lsblk sur les instances basées sur Nitro affiche les noms de disque sous la forme nvme[0-26 ]n1. Pour en savoir plus, consultez la section Amazon EBS et NVMe sur les instances Linux. Voici un exemple de sortie de la commande lsblk sur une instance basée sur 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.    Exécutez la commande suivante pour devenir un utilisateur root :

sudo -i

14.    Montez la partition racine du volume monté sur /mnt. Dans l'exemple précédent, /dev/xvdf1 ou /dev/nvme2n1p2 représente la partition racine du volume monté. Pour en savoir plus, consultez la section Rendre un volume Amazon EBS disponible à l’utilisation sous Linux.

Remarque : dans l'exemple suivant, remplacez /dev/xvdf1 par la partition racine appropriée pour votre volume.

mount -o nouuid /dev/xvdf1 /mnt

Remarque : si /mnt n'existe pas dans votre configuration, créez un répertoire de montage, puis montez la partition racine du volume monté dans ce nouveau répertoire.

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

Vous pouvez désormais accéder aux données de l'instance affectée par le biais du répertoire de montage.

15.    Montez /dev, /run, /proc et /sys de l'instance de secours sur les mêmes chemins que le volume nouvellement monté :

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

Appelez la fonction chroot pour accéder au répertoire de montage.

Remarque : si vous disposez de partitions /boot et /etc distinctes, montez-les sur /mnt/boot et /mnt/etc avant d'exécuter la commande suivante.

chroot /mnt

Définition du mot de passe de l'utilisateur root ou de tout autre utilisateur du système d'exploitation

Utilisez la commande passwd pour définir le mot de passe de l'utilisateur de votre système d'exploitation. Dans l'exemple suivant, l'utilisateur est root :

passwd root

Vérification et mise à jour des paramètres GRUB de la console série

Remarque : vous pouvez ignorer cette étape si la EC2 Serial Console fonctionne correctement sur l'instance concernée ; il vous suffit alors de définir le mot de passe de l'utilisateur de votre système d'exploitation.

Le port de la console série pris en charge pour Linux est ttyS0. Si l'écran reste noir sans afficher de sortie lors de la connexion à la EC2 Serial Console, vous devez vérifier que l'entrée de la console est correctement configurée dans les paramètres GRUB. Les exemples fournis ci-dessous sont tirés des AMI AWS Marketplace pour les différentes distributions dans lesquelles la console série fonctionne correctement :

GRUB2 pour Amazon Linux 2, RHEL et CentOS 7

1.    Vérifiez que l'entrée de la console pour le ttyS0 est correctement définie sur la ligne GRUB_CMDLINE_LINUX_DEFAULT du fichier /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 l'entrée de console pour ttyS0 n’est pas définie, ajoutez-la sur la ligne GRUB_CMDLINE_LINUX_DEFAULT. Mettez ensuite GRUB à jour pour régénérer le fichier /boot/grub2/grub.cfg :

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

GRUB1 (Legacy GRUB) pour Red Hat 6 et Amazon Linux 1

1.    Vérifiez que l'entrée de la console pour le ttyS0 est correctement définie dans la ligne du noyau du fichier /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 l'entrée de console pour le ttyS0 n’est pas définie, ajoutez-la dans le fichier /boot/grub/grub.conf, conformément aux exemples précédents.

GRUB2 pour Ubuntu 16.04, 18.04 et 20.04

1.    Vérifiez que l'entrée de console pour le ttyS0 est correctement définie dans la ligne GRUB_CMDLINE_LINUX_DEFAULT du fichier /etc/default/grub.d/50-cloudimg-settings.cfg :

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

2.    Si l'entrée de console console=ttyS0 n’est pas présente**, ajoutez-la dans la ligne GRUB_CMDLINE_LINUX_DEFAULT. Mettez ensuite à jour la configuration GRUB à l'aide de la commande suivante :

update-grub

**GRUB2 pour RHEL 8, CentOS 8 et Amazon Linux 2023
**

1.    Exécutez la commande grubby --default-kernel pour voir le noyau par défaut actuel :

grubby --default-kernel

2.    Exécutez la commande grubby --info=ALL pour voir tous les noyaux disponibles, leurs index et leurs arguments :

grubby --info=ALL

3.    Vérifiez que l'entrée de console pour le ttyS0 est correctement définie dans la ligne args du noyau par défaut décrit à l'étape 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 l'entrée de console pour le ttyS0 n'est pas définie, utilisez la commande grubby suivante pour l'ajouter aux arguments du noyau par défaut :

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

Démonter et détacher le volume racine de l'instance de secours, puis attacher le volume à l'instance affectée

1.    Quittez chroot et démontez /dev, /run, /proc et /sys :

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

2.    Dans la console Amazon EC2, choisissez Instances, puis choisissez l'instance de secours.

3.    Choisissez État de l’instance, Arrêter l’instance, puis sélectionnez Oui, Arrêter.

4.    Détachez le volume racine id-xxxxx (le volume de l'instance affectée) de l'instance de secours.

5.    Attachez le volume racine que vous avez détaché à l'étape 4 à l'instance affectée en tant que volume racine (/dev/sda1), puis démarrez l'instance.

Remarque : le périphérique racine varie selon l'AMI. Les noms /dev/xvda ou /dev/sda1 sont réservés au périphérique racine. Par exemple, Amazon Linux 1 et 2 utilisent /dev/xvda. D'autres distributions, telles qu'Ubuntu 16, 18, CentOS 7 et RHEL 7.5, utilisent /dev/sda1.

Vous pouvez désormais accéder au système d'exploitation de l'instance affectée via la EC2 Serial Console en utilisant le mot de passe défini à l'étape précédente pour le root ou pour tout autre utilisateur du système d'exploitation.

Informations connexes

Résolution des problèmes de votre instance Linux à l'aide de GRUB

AWS OFFICIEL
AWS OFFICIELA mis à jour il y a 2 ans