Usando AWS re:Post, accetti AWS re:Post Termini di utilizzo

Come posso accedere alla console seriale EC2 di un'istanza Linux irraggiungibile o inaccessibile?

7 minuti di lettura
0

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

Breve descrizione

Questo articolo è applicabile ai sistemi operativi Linux seguenti:

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

Prerequisiti: per utilizzare la console seriale, assicurati che tutti i prerequisiti siano soddisfatti. Tieni presente che il passaggio di impostazione di una password utente del sistema operativo deve essere completato dopo l'accesso al volume root dell'istanza.

Risoluzione

Per configurare l'accesso alla console seriale, completa i passaggi seguenti.

Nota: se la console seriale EC2 funziona correttamente e devi solo impostare la password per l'utente del sistema operativo, completa solo quel passaggio della risoluzione. Per verificare il funzionamento della console seriale EC2, consulta Connect to the EC2 Serial Console.

Accedi al volume root dell'istanza

Per accedere al volume root dell'istanza, avvia un'istanza temporanea. Quindi monta nuovamente il volume Amazon Elastic Block Store (Amazon EBS) sull'istanza di ripristino. Dall'istanza di ripristino controlla e modifica le impostazioni di GRUB per la console seriale. Puoi anche impostare la password per l'utente root o l'utente del sistema operativo e consentire l'accesso root per il daemon SSH.

Importante: quando configuri un'istanza temporanea, tieni presente quanto segue:

Collega il disco root a un'istanza di ripristino

Completa i passaggi seguenti:

  1. Crea una nuova coppia di chiavi o usa una coppia di chiavi esistente.

  2. Ottieni l'ID volume e il nome dispositivo del volume root dell'istanza originale.

  3. Arresta l'istanza originale.

  4. Avvia un'istanza temporanea da una Amazon Machine Image (AMI) con la stessa versione del sistema operativo Linux nella stessa zona di disponibilità.

  5. Scollega il volume root dall'istanza originale e collegalo all'istanza temporanea come volume secondario. Prendi nota del nome del dispositivo del volume.

  6. Connettiti all'istanza temporanea con la tua coppia di chiavi SSH.

  7. Per passare all'utente root, esegui questo comando:

    [ec2-user ~]$ sudo su
  8. Per identificare il nome e la partizione del dispositivo a blocchi, esegui il comando seguente dall'istanza temporanea:

    [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

    L'esempio mostrato usa un'istanza XEN con driver blockfront. I dispositivi denominati /dev/xvda e /dev/xvdf hanno volumi partizionati, a differenza di /dev/xvdg. Se il volume è partizionato, esegui il comando seguente per montare la partizione (/dev/xvdf1) invece del dispositivo raw (/dev/xvdf):

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

    Se usi un'istanza basata su Nitro, il nome del dispositivo di volume è simile a /dev/nvme[0-26]n1. Se la tua istanza è costruita su Nitro con NVMe, monta la partizione nella directory /mnt. Usa il nome del dispositivo che hai identificato in precedenza per eseguire il comando seguente:

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

    Per ulteriori informazioni, consulta Device names for volumes on Amazon EC2 instances.

  9. Per creare un ambiente chroot nella directory /mnt, esegui questo comando:

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

    Nell'esempio precedente, le directory /dev, /proc, /sys e /run sono montate in modo vincolato dal file system root originale. Questa configurazione consente ai processi eseguiti all'interno dell'ambiente chroot di accedere a queste directory di sistema.

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

In chroot, usa il comando passwd per impostare la password per l'utente del sistema operativo e consentire l'accesso root nella configurazione SSH.

Nell'esempio che segue, l'utente è root. Puoi impostare una password root con il comando seguente:

[root ~]$ passwd root

Per consentire l'accesso root per il daemon SSH (sshd) in Linux e cambiare #PermitRootLogin yes in PermitRootLogin yes, esegui il codice seguente:

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

Passa i parametri del kernel al GRUB del bootloader

Per inviare tutto l'output della console alla porta seriale, passa al GRUB del bootloader i parametri del kernel console=tty0 console=ttyS0,115200.

Nota: tty0 e ttyS0 contengono uno zero e non la lettera O.

L'elenco seguente mostra le opzioni selezionate per questo esempio:

  • console= è un parametro del kernel che specifica il dispositivo console preferito per i messaggi del kernel.
  • tty0 si riferisce alla prima console virtuale (modalità testo) sul sistema.
  • ttyS0 si riferisce alla prima porta seriale.
  • 115200 è la velocità di trasmissione (bit al secondo) della porta seriale. È una velocità di trasmissione comune utilizzata per le comunicazioni seriali.
  • n8 specifica la dimensione dei caratteri e le impostazioni di parità per la porta seriale. n sta per nessuna parità. 8 indica che la dimensione dei caratteri è di 8 bit.
  • Il parametro tty0 attiva il kernel per inviare messaggi di console alla prima console virtuale (tty0). Questa è in genere la console primaria in modalità testo sui sistemi Linux.
  • Il parametro ttyS0 configura il kernel per inviare messaggi di console alla prima porta seriale (ttyS0). I messaggi vengono inviati a una velocità di trasmissione di 115200 senza parità e 8 bit per carattere.

Controlla e aggiorna le impostazioni di GRUB2 per la console seriale

Aggiungi i parametri del kernel console=tty0 e console=ttyS0,115200 alla riga GRUB_CMDLINE_LINUX_DEFAULT nel file /etc/default/grub

Completa i passaggi seguenti:

  1. Apri il file /etc/default/grub con un editor di testo in chroot. Ad esempio, per utilizzare l'editor nano o vi, esegui uno dei comandi seguenti:

    [root ~]$ nano /etc/default/grub
    [root ~]$ vi /etc/default/grub
  2. Individua la riga che inizia con GRUB_CMDLINE_LINUX_DEFAULT. La riga è simile alla seguente:

    GRUB_CMDLINE_LINUX_DEFAULT="quiet splash"
  3. Aggiungi i parametri del kernel console=tty0 e console=ttyS0,115200 a questa riga. Inserisci uno spazio per separare questi parametri del kernel dai parametri correnti. La riga aggiornata sarà simile alla seguente:

    GRUB_CMDLINE_LINUX_DEFAULT="quiet splash console=tty0 console=ttyS0,115200"
  4. Salva le modifiche e esci dall'editor di testo.

  5. Per aggiornare la configurazione di GRUB, esegui il comando seguente:

    Per Red Hat, CentOS, Amazon Linux e Rocky Linux

    Su macchine basate su BIOS:

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

    Su macchine basate su UEFI:

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

    Per Ubuntu e Debian

    Il comando seguente rigenera il file di configurazione di GRUB con i nuovi parametri del kernel.

    [root ~]$ update-grub
  6. Per uscire da chroot e smontare /dev, /run, /proc e /sys, esegui il comando seguente:

    [root ~]$ exit; umount -fl /mnt/{dev,proc,run,sys,}
  7. Dalla console Amazon EC2 scegli Istanze, quindi scegli l'istanza di ripristino.

  8. Scegli Stato dell'istanza, Arresta istanza, quindi seleziona Sì, arresta.

  9. Scollega il volume root id-##### (il volume dall'istanza danneggiata) dall'istanza di ripristino.

  10. Collega il volume root all'istanza danneggiata come volume root (/dev/sda1), quindi avvia l'istanza.

  11. Usa il client basato su browser per connetterti alla console seriale dell'istanza EC2.

  12. Accedi con l'utente come root e la password impostata in precedenza.

AWS UFFICIALE
AWS UFFICIALEAggiornata un mese fa