Come posso configurare l'accesso alla Console seriale EC2 di un'istanza Linux irraggiungibile o inaccessibile?

Ultimo aggiornamento: 22-03-2022

La mia istanza Linux di Amazon Elastic Compute Cloud (Amazon EC2) è irraggiungibile o inaccessibile. Non ho configurato l'accesso alla Console seriale EC2 a livello di sistema operativo. Come posso modificare le configurazioni del sistema operativo per la Console seriale EC2 e impostare la password in modo che qualsiasi utente del sistema operativo possa accedere all'istanza?

Breve descrizione

Per configurare l'accesso alla console seriale, effettua le seguenti operazioni:

1.    Accedi al volume root dell'istanza.

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

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

Nota: è possibile saltare il passaggio 3 se la Console seriale EC2 funziona correttamente sull'istanza interessata e si deve solo impostare la password per l'utente del sistema operativo.

Prerequisiti

Per utilizzare la console seriale, assicurati di aver soddisfatto i prerequisiti, ad eccezione dell’impostazione di una password utente del sistema operativo. L'impostazione di una password è discussa nella seguente risoluzione.

Risoluzione

Accesso al volume root dell'istanza utilizzando un'istanza di ripristino

Crea un'istanza di ripristino temporanea, quindi monta nuovamente il volume Amazon Elastic Block Store (Amazon EBS) sull'istanza di ripristino. Dall'istanza di ripristino, è possibile controllare e modificare le impostazioni 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 da un archivio istanza. Poiché la procedura di ripristino richiede l'arresto e l'avvio dell'istanza, tutti i dati su quell'istanza andranno persi. Per ulteriori informazioni, consulta Determinazione del tipo di dispositivo root dell'istanza.

1.    Crea uno snapshot EBS del volume root. Per ulteriori informazioni, consulta Creazione di snapshot di Amazon EBS.

2.    Apri la console di Amazon EC2.

Nota: assicurati di trovarti nella regione corretta.

3.    Seleziona Istanze dal pannello di navigazione, quindi scegli l'istanza danneggiata.

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

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

Nota: il dispositivo root è diverso in base all'AMI, ma /dev/xvda o /dev/sda1 sono riservati per il dispositivo root. Ad esempio, Amazon Linux 1 e 2 utilizzano /dev/xvda. Altre distribuzioni, come Ubuntu 16, 18, CentOS 7 e RHEL 7.5, utilizzano /dev/sda1.

6.    Scegli Operazioni, Distacca volume, quindi scegli Sì, distacca. Prendi nota della zona di disponibilità.

Nota: è possibile etichettare il volume EBS prima di staccarlo per identificare il volume EBS nelle fasi successive.

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

Nota: a seconda del codice 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, è necessario avviare un'AMI con lo stesso codice prodotto. Per maggiori informazioni, consulta Ottenimento del codice prodotto per la tua istanza.

Se l'istanza originale sta eseguendo SELinux (RHEL, CentOS 7 o 8, ad esempio), lancia l'istanza di ripristino da un'AMI che usa SELinux. Se selezioni un'AMI che esegue un sistema operativo diverso, ad esempio Amazon Linux 2, qualsiasi file modificato nell'istanza originale avrà le etichette SELinux non funzionanti.

8.    Dopo l'avvio dell'istanza di ripristino, scegli Volumi dal pannello di navigazione, quindi scegli il volume root distaccato dell'istanza danneggiata.

9.    Scegli Operazioni, Allega volume.

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

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

12.    Esegui il comando lsblk per visualizzare i tuoi 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 Amazon EBS e NVMe su istanze 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.    Emetti il seguente comando per diventare root:

sudo -i

14.    Monta la partizione root del volume montato su /mnt. Nell'esempio precedente, /dev/xvdf1 o /dev/nvme2n1p2 è la partizione root del volume montato. Per maggiori informazioni, consulta Come 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 configurazione, crea una directory di montaggio e quindi monta la partizione root del volume montato in questa nuova directory.

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

Ora è possibile accedere ai dati dell'istanza danneggiata tramite la directory di montaggio.

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 di montaggio.

Nota: se si dispone di partizioni /boot e /etc separate, montarle su /mnt/boot e /mnt/etc prima di emettere il seguente comando.

chroot /mnt

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

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

passwd root

Controlla e aggiorna le impostazioni GRUB per la console seriale.

Nota: è possibile saltare questo passaggio se la console seriale EC2 funziona correttamente sull'istanza interessata e si deve solo impostare la password per l'utente del 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 della 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, aggiungerla 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 (Legacy GRUB) per Red Hat 6 e Amazon Linux 1

1.    Verifica che la voce della console per ttyS0 sia impostata correttamente nella riga del 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, aggiungerla 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 della 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 console=ttyS0 non è presente, aggiungila nella riga GRUB_CMDLINE_LINUX_DEFAULT. Quindi aggiorna la configurazione GRUB usando il seguente comando:

update-grub

GRUB2 per RHEL 8 e CentOS 8

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 argomenti:

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"

4.    Se la voce della console per ttyS0 non è impostata, allora usa il seguente comando grubby per aggiungerla agli argomenti del kernel predefinito:

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

Smonta e scollega il volume root dall'istanza di ripristino, quindi allega 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, Arresta istanza, quindi seleziona Sì, arresta.

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

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

Nota: Il dispositivo root differisce in base all’AMI. I nomi /dev/xvda o /dev/sda 1 sono riservati al dispositivo root. Ad esempio, Amazon Linux 1 e 2 utilizzano /dev/xvda. Altre distribuzioni, come Ubuntu 16, 18, CentOS 7 e RHEL 7.5, utilizzano /dev/sda1.

Ora è possibile 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.


Questo articolo è stato utile?


Hai bisogno di supporto tecnico o per la fatturazione?