Come faccio a configurare l'accesso alla console seriale EC2 di un'istanza Linux irraggiungibile o inaccessibile?

8 minuti di lettura
0

La mia istanza Linux Amazon Elastic Compute Cloud (Amazon EC2) è irraggiungibile o inaccessibile. Non ho configurato l'accesso alla console seriale EC2 a livello di sistema operativo.

Breve descrizione

Per configurare l'accesso alla console seriale, procedi come segue:

1.    Accedi al volume principale dell'istanza.

2.    Imposta la password per l'utente root o per qualsiasi altro utente del sistema operativo.

3.    Controlla e aggiorna le impostazioni di GRUB per la console seriale.

Nota: puoi saltare il passaggio 3 se la console seriale EC2 funziona correttamente sull'istanza interessata e ti basterà impostare la password per l'utente del tuo sistema operativo.

Prerequisiti

Per utilizzare la console seriale, assicurati di soddisfare i prerequisiti, a eccezione di Imposta una password utente del sistema operativo. L'impostazione della password è illustrata nella risoluzione seguente.

Risoluzione

Accedi al volume principale dell'istanza utilizzando un'istanza di ripristino

Crea un'istanza di ripristino temporanea, quindi rimontala il volume Amazon Elastic Block Store (Amazon EBS) sull'istanza di ripristino. Dall'istanza di ripristino, è possibile controllare e modificare le impostazioni di GRUB per la console seriale. È inoltre possibile impostare la password per l'utente root o qualsiasi altro utente del sistema operativo.

Importante: non eseguire questa procedura su un'istanza supportata dall'archivio dell'istanza. Poiché la procedura di ripristino richiede l'arresto e l'avvio dell'istanza, tutti i dati su quell'istanza verranno persi. Per ulteriori informazioni, consulta Determinare il tipo di dispositivo root dell'istanza.

1.    Crea un'istantanea EBS del volume root. Per ulteriori informazioni, consulta Creare istantanee Amazon EBS.

2.    Apri la console Amazon EC2.

Nota: assicurati di trovarti nella regione corretta.

3.    Seleziona Istanze dal riquadro di navigazione, quindi scegli l'istanza compromessa.

4.    Scegli Stato istanza, Arresta istanza, quindi seleziona Stop.

5.    Nella scheda Archiviazione, in Dispositivi a blocchi, seleziona l'ID del volume per /dev/sda1 o /dev/xvda.

Nota: il dispositivo principale differisce in base all'AMI, ma /dev/xvda o /dev/sda1 sono riservati a questo dispositivo. Ad esempio, Amazon Linux 1 e 2 usano /dev/xvda. Altre distribuzioni, come Ubuntu 16, 18, CentOS 7 e RHEL 7.5, usano /dev/sda1.

6.    Scegli Azioni, Scollega volume, quindi seleziona Sì, scollega. Annota la zona di disponibilità.

Nota: puoi etichettare il volume EBS prima di scollegarlo per facilitarne l'identificazione nei passaggi successivi.

7.    Avvia un'istanza EC2 di ripristino nella stessa zona di disponibilità.

Nota: a seconda del codice del prodotto, potrebbe essere necessario avviare un'istanza EC2 dello stesso tipo di sistema operativo. Ad esempio, se l'istanza EC2 danneggiata è un'AMI RHEL a pagamento, devi avviare un'AMI con lo stesso codice prodotto. Per ulteriori informazioni, consulta Ottenere il codice prodotto per l'istanza.

Se l'istanza originale esegue SELinux (RHEL, CentOS 7 o 8, ad esempio), avvia l'istanza di ripristino da un'AMI che utilizza SELinux. Se selezioni un'AMI che esegue un sistema operativo diverso, come Amazon Linux 2, qualsiasi file modificato sull'istanza originale presenta etichette SELinux non valide.

8.    Dopo l'avvio dell'istanza di ripristino, scegli Volumi dal riquadro di navigazione, quindi seleziona il volume principale scollegato dell'istanza danneggiata.

9.    Scegli Azioni, Allega volume.

10.    Scegli l'ID dell'istanza di ripristino ( id-xxxxx), quindi imposta un dispositivo non utilizzato. In questo esempio, /dev/sdf.

11.     Usa SSH per connetterti all'istanza di ripristino.

12.    Esegui il comando lsblk per visualizzare i dispositivi disco disponibili:

lsblk

Di seguito è riportato un esempio dell'output:

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: le istanze basate su Nitro espongono i volumi EBS come dispositivi a blocchi NVMe. L'output generato dal comando lsblk sulle istanze basate su Nitro mostra i nomi dei dischi come nvme[0-26]n1. Per ulteriori informazioni, consulta Istanze Amazon EBS e NVMe su Linux. Di seguito è riportato un esempio dell'output del comando lsblk su un'istanza basata su 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.    Esegui il seguente comando per diventare utente root:

sudo -i

14.    Monta la partizione principale del volume montato su /mnt. Nell'esempio precedente, /dev/xvdf1 o /dev/nvme2n1p2 è la partizione root del volume montato. Per ulteriori informazioni, consulta Rendere disponibile un volume Amazon EBS per l'uso su Linux.

Nota: nell'esempio seguente, sostituisci /dev/xvdf1 con la partizione root corretta per il tuo volume.

mount -o nouuid /dev/xvdf1 /mnt

Nota: se /mnt non esiste nella tua configurazione, crea una directory di montaggio e poi monta la partizione root del volume montato in questa nuova directory.

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

Ora puoi accedere ai dati dell'istanza danneggiata tramite la directory montata.

15.    Monta /dev, /run, /proc e /sys dell'istanza di ripristino sugli stessi percorsi del volume appena montato:

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

Chiama la funzione chroot per passare alla directory mount.

Nota: se hai partizioni /boot e /etc separate, montatele su /mnt/boot e /mnt/etc prima di eseguire il comando seguente.

chroot /mnt

Imposta la password per l'utente root o per qualsiasi altro utente del sistema operativo.

Usa il comando passwd per impostare la password per l'utente del tuo sistema operativo. Nell'esempio seguente, l'utente è root:

passwd root

Controlla e aggiorna le impostazioni di GRUB per la console seriale.

Nota: puoi saltare questo passaggio se la console seriale EC2 funziona correttamente sull'istanza interessata e ti basterà impostare la password per l'utente del tuo sistema operativo.

La porta console seriale supportata per Linux è ttyS0. Se lo schermo rimane nero senza fornire alcun output durante la connessione alla console seriale EC2, è necessario assicurarsi che la voce della console sia configurata correttamente nelle impostazioni di GRUB. Gli esempi forniti di seguito sono tratti dalle AMI di AWS Marketplace per le diverse distribuzioni in cui la console seriale funziona correttamente:

GRUB2 per Amazon Linux 2, RHEL e CentOS 7

1.    Verifica che la voce console per ttyS0 sia impostata correttamente nella riga GRUB_CMDLINE_LINUX_DEFAULT del file /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.    Se la voce della console per ttyS0 non è impostata, aggiungila nella riga GRUB_CMDLINE_LINUX_DEFAULT. Quindi aggiorna GRUB per rigenerare il file /boot/grub2/grub.cfg:

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

GRUB1 (GRUB legacy) per Red Hat 6 e Amazon Linux 1

1.    Verifica che la voce console per ttyS0 sia impostata correttamente nella riga kernel del file /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.    Se la voce della console per ttyS0 non è impostata, aggiungila nel file /boot/grub/grub.conf secondo gli esempi precedenti.

GRUB2 per Ubuntu 16.04, 18.04 e 20.04

1.    Verifica che la voce console per ttyS0 sia impostata correttamente nella riga GRUB_CMDLINE_LINUX_DEFAULT del file /etc/default/grub.d/50-cloudimg-settings.cfg:

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

2.    Se la voce della console per console=ttyS0 non è impostata**,** aggiungila nella riga GRUB_CMDLINE_LINUX_DEFAULT. Quindi aggiorna la configurazione di GRUB usando il seguente comando:

update-grub

**GRUB2 per RHEL 8, CentOS 8 e Amazon Linux 2023
**

1.    Esegui il comando grubby --default-kernel per vedere il kernel predefinito corrente:

grubby --default-kernel

2.    Esegui il comando grubby --info=ALL per vedere tutti i kernel disponibili, i loro indici e i loro args:

grubby --info=ALL

3.    Verifica che la voce della console per ttyS0 sia impostata correttamente nella riga args per il kernel predefinito descritto nel passaggio 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.    Se la voce della console per ttyS0 non è impostata, usa il seguente comando grubby per aggiungerla a args del kernel predefinito:

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

Smonta e scollega il volume root dall'istanza di ripristino, quindi collega il volume all'istanza danneggiata

1.    Esci da chroot e smonta /dev, /run, /proc e /sys:

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

2.    Dalla console Amazon EC2, scegli Istanze, quindi scegli l'istanza di ripristino.

3.    Scegli Stato istanza, Ferma istanza, quindi seleziona Sì, ferma.

4.    Scollega il volume root id-xxxxx (il volume dall'istanza danneggiata) dall'istanza di ripristino.

5.    Collega il volume root che hai scollegato nel passaggio 4 all'istanza danneggiata come volume root (/dev/sda1), quindi avvia l'istanza.

Nota: il dispositivo root si differenzia a seconda dell'AMI. I nomi /dev/xvda o /dev/sda1 sono riservati al dispositivo root. Ad esempio, Amazon Linux 1 e 2 usano /dev/xvda. Altre distribuzioni, come Ubuntu 16, 18, CentOS 7 e RHEL 7.5, usano /dev/sda1.

Ora puoi accedere al sistema operativo dell'istanza danneggiata tramite la console seriale EC2 utilizzando la password definita nel passaggio precedente per l'utente root o qualsiasi altro utente del sistema operativo.

Informazioni correlate

Risolvi i problemi della tua istanza Linux usando GRUB

AWS UFFICIALE
AWS UFFICIALEAggiornata 2 anni fa