Comment puis-je configurer l'accès à l'EC2 Serial Console d'une instance Linux inaccessible ou inaccessible ?

Date de la dernière mise à jour : 22/03/2022

Mon instance Linux Amazon Elastic Compute Cloud (Amazon EC2) est inaccessible ou inaccessible. Je n'ai pas configuré l'accès à l'EC2 Serial Console au niveau du système d'exploitation. Comment puis-je modifier les configurations du système d'exploitation pour l'EC2 Serial Console et définir le mot de passe pour que tout utilisateur du système d'exploitation puisse accéder à l'instance ?

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 l'EC2 Serial Console fonctionne correctement sur l'instance concernée et qu'il vous suffit de définir le mot de passe de l'utilisateur de votre système d'exploitation.

Prérequis

Pour utiliser la console série, assurez-vous que vous remplissez les prérequis, à l'exception de Définir un mot de passe utilisateur du système d'exploitation. La définition d'un mot de passe est abordée dans la résolution suivante.

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 l'instance de secours. À partir de 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 : n'effectuez pas cette procédure sur une instance basée sur le stockage d'instances. Comme la procédure de récupération nécessite l'arrêt et le démarrage de votre instance, toutes les données qui se trouvent sur cette instance sont perdues. Pour plus d'informations, 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 plus d'informations, consultez la section Créer des instantanés Amazon EBS.

2.    Ouvrez la console Amazon EC2.

Remarque : assurez-vous que vous êtes dans la bonne région.

3.    Sélectionnez Instances dans le panneau de navigation, puis sélectionnez l'instance affectée.

4.    Choisissez Instance State (État de l'instance), Stop instance (Arrêter l'instance), puis sélectionnez Stop (Arrêter).

5.    Dans l'onglet Storage (Stockage), sous Block devices (Périphériques de stockage en mode bloc), sélectionnez le Volume ID (ID de volume) pour /dev/sda1 ou /dev/xvda.

Remarque : le périphérique racine se distingue par l'AMI, mais /dev/xvda ou /dev/sda1 est toujours réservé au périphérique racine. Par exemple, Amazon Linux 1 et 2 utilisent /dev/xvda. D'autres distributions, telles que Ubuntu 16, 18, CentOS 7 et RHEL 7.5, utilisent /dev/sda1.

6.    Sélectionnez Actions, Detach Volume (Détacher un volume), puis Yes, Detach (Oui, détacher). Prenez note de la zone de disponibilité.

Remarque : vous pouvez étiqueter le volume EBS avant de le détacher pour permettre son identification dans les étapes ultérieures.

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

Remarque : en fonction du code produit, il est possible que vous soyez obligé de 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 de votre instance.

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

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

9.    Choisissez Actions, Attach Volume (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, /dev/sdf.

11.     Utilisez SSH pour vous connecter à l'instance de secours.

12.    Exécutez la commande lsblk pour voir vos disques disponibles :

lsblk

Voici un exemple de résultat :

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 indique les noms de disques 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 commande lsblk sur une instance 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 racine :

sudo -i

14.    Montez la partition racine du volume monté sur /mnt. Dans l'exemple précédent, /dev/xvdf1 ou /dev/nvme2n1p2 est la partition racine du volume monté. Pour plus d'informations, consultez la section Rendre un volume Amazon EBS disponible à l'utilisation sur 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é sur ce nouveau répertoire.

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

Vous pouvez désormais accéder aux données de l'instance Démontez et détachez le volume racine de l'instance de secours, puis attachez le volume à l'instance endommagée par le biais du répertoire de montage.

15.    Montez les partitions /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 apporter des modifications dans le répertoire de montage.

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

chroot /mnt

Définissez le 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érifiez et mettez à jour les paramètres GRUB de la console série.

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

Le port de console série pris en charge pour Linux est ttyS0. Si l'écran reste noir sans fournir de sortie lors de la connexion à l'EC2 Serial Console, vous devez vous assurer 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 console pour le ttyS0 est correctement définie dans 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 le ttyS0 n'est pas définie, ajoutez-la dans la ligne GRUB_CMDLINE_LINUX_DEFAULT. Mettez à jour GRUB, afin de régénérer le fichier /boot/grub2/grub.cfg :

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

GRUB1 (GRUB hérité) pour Red Hat 6 et Amazon Linux 1

1.    Vérifiez que l'entrée de console pour 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 et CentOS 8

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

grubby --default-kernel

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

grubby --info=ALL

3.    Vérifiez que l'entrée de console pour ttyS0 est correctement définie dans la ligne args pour le 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"

4.    Si l'entrée de console pour ttyS0 n'est pas définie, utilisez la commande grubby suivante pour l'ajouter aux args du noyau par défaut :

grubby --args 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 endommagée

1.    Quittez chroot et démontez les montages /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 Instance State (État de l'instance), Stop instance (Arrêter l'instance), puis sélectionnez Yes, Stop (Oui, arrêter).

4.    Détachez le volume racine id-xxxxx (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 diffère 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 que 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 endommagée via l'EC2 Serial Console à l'aide du mot de passe défini à l'étape précédente pour la racine ou tout autre utilisateur du système d'exploitation.


Cet article vous a-t-il été utile ?


Besoin d'aide pour une question technique ou de facturation ?