내용으로 건너뛰기

연결할 수 없거나 액세스할 수 없는 Linux 인스턴스의 EC2 직렬 콘솔에 액세스하려면 어떻게 해야 합니까?

5분 분량
0

Amazon Elastic Compute Cloud(Amazon EC2) Linux 인스턴스에 연결하거나 액세스할 수 없습니다. 또한 OS 수준에서 EC2 직렬 콘솔 액세스를 구성하지 않았습니다.

간략한 설명

이 문서는 다음 Linux 운영 체제(OS)에 적용됩니다.

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

사전 요구 사항: 직렬 콘솔을 사용하려면 모든 사전 요구 사항을 충족해야 합니다. 참고로 OS 사용자 암호 설정 단계는 인스턴스의 루트 볼륨에 액세스한 후 완료해야 합니다.

해결 방법

직렬 콘솔에 대한 액세스를 구성하려면 다음 단계를 완료해야 합니다.

참고: EC2 직렬 콘솔이 제대로 작동하고 OS 사용자의 암호만 설정하면 되는 경우에는 해당 해결 단계만 완료하십시오. EC2 직렬 콘솔이 작동하는지 확인하려면 EC2 직렬 콘솔에 연결을 참조하십시오.

인스턴스의 루트 볼륨에 액세스

인스턴스의 루트 볼륨에 액세스하려면 임시 인스턴스를 시작합니다. 그런 다음 Amazon Elastic Block Store (Amazon EBS) 볼륨을 복구 인스턴스에 다시 마운트합니다. 그리고 복구 인스턴스에서 직렬 콘솔의 GRUB 설정을 확인하고 수정합니다. 루트 사용자 또는 OS 사용자의 암호를 설정하고 SSH 데몬에 대한 루트 액세스를 허용할 수도 있습니다.

중요: 임시 인스턴스를 설정할 때는 다음 사항을 참고하십시오.

복구 인스턴스에 루트 디스크 연결

다음 단계를 완료하십시오.

  1. 새 키 페어를 생성하거나 기존 키 페어를 사용합니다.

  2. 원본 인스턴스의 루트 볼륨에 대한 볼륨 ID 및 디바이스 이름을 가져옵니다.

  3. 원본 인스턴스를 중지합니다.

  4. 동일한 가용 영역에서 동일한 Linux OS 버전을 사용하는 Amazon Machine Image(AMI)에서 임시 인스턴스를 시작합니다.

  5. 원본 인스턴스에서 루트 볼륨을 분리하고, 임시 인스턴스에 보조 볼륨으로 연결합니다. 볼륨 디바이스 이름을 기록해 둡니다.

  6. SSH 키 페어로 임시 인스턴스에 연결합니다.

  7. 루트 사용자로 변경하려면 다음 명령을 실행합니다.

    [ec2-user ~]$ sudo su
  8. 블록 디바이스 이름과 파티션을 식별하려면 임시 인스턴스에서 다음 명령을 실행합니다.

    [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

    이전 예에서는 blockfront 드라이버가 있는 XEN 인스턴스를 사용합니다. 볼륨 디바이스 이름 /dev/xvda와 /dev/xvdf는 모두 파티셔닝된 볼륨이고 /dev/xvdg는 아닙니다. 볼륨이 파티셔닝된 경우 다음 명령을 실행하여 원시 디바이스(/dev/xvdf) 대신 파티션(/dev/xvdf1)을 마운트합니다.

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

    Nitro 기반 인스턴스를 사용하는 경우 볼륨 디바이스 이름은 /dev/nvme[0-26]n1과 비슷합니다. 인스턴스가 NVMe를 사용하여 Nitro를 기반으로 구축된 경우 /mnt 디렉터리에 파티션을 마운트합니다. 앞서 식별한 디바이스 이름을 사용하여 다음 명령을 실행합니다.

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

    자세한 내용은 Amazon EC2 인스턴스 볼륨의 디바이스 이름을 참조하십시오.

  9. /mnt 디렉터리에 chroot 환경을 생성하려면 다음 명령을 실행합니다.

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

    위 예제에서 /dev, /proc, /sys 및 /run 디렉터리는 원래 루트 파일 시스템에서 바인드 마운트되었습니다. 이 설정을 통해 chroot 환경 내에서 실행되는 프로세스가 시스템 디렉터리에 액세스할 수 있습니다.

루트 사용자 또는 다른 OS 사용자의 암호 설정

chroot에서 passwd 명령을 사용하여 OS 사용자의 암호를 설정하고 SSH 구성에서 루트 액세스를 허용합니다.

다음 예시에서 사용자는 루트입니다. 다음 명령을 사용하여 루트 암호를 설정할 수 있습니다.

[root ~]$ passwd root

Linux에서 SSH 데몬(sshd)에 대한 루트 액세스 허용을 설정하고 #PermitRootLogin yes를 PermitRootLogin yes로 변경하려면 다음 코드를 실행합니다.

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

커널 파라미터를 부트로더 GRUB에 전달

모든 콘솔 출력을 직렬 포트로 보내려면 다음 커널 파라미터 console=tty0 console=ttyS0,115200을 부트로더 GRUB에 전달해야 합니다.

참고: tty0 및 ttyS0은 0을 포함하며 문자 O는 포함하지 않습니다.

다음 목록은 이 예시에서 선택한 옵션을 보여줍니다.

  • **console=**은 커널 메시지에 사용할 기본 콘솔 디바이스를 지정하는 커널 파라미터입니다.
  • tty0은 시스템의 첫 번째 가상 콘솔(텍스트 모드)을 나타냅니다.
  • ttyS0은 첫 번째 직렬 포트를 나타냅니다.
  • 115200은 직렬 포트의 전송 속도(초당 비트 수)입니다. 이는 직렬 통신에 사용되는 공통 전송 속도입니다.
  • n8은 직렬 포트의 문자 길이 및 패리티 설정을 지정합니다. n은 패리티 없음을 나타냅니다. 8은 문자 길이가 8비트임을 나타냅니다.
  • tty0 파라미터는 커널을 활성화하여 콘솔 메시지를 첫 번째 가상 콘솔(tty0)에 보냅니다. 이는 일반적으로 Linux 시스템의 기본 텍스트 모드 콘솔입니다.
  • ttyS0 파라미터는 콘솔 메시지를 첫 번째 직렬 포트(ttyS0)로 보내도록 커널을 구성합니다. 메시지는 115200의 전송 속도(패리티 없음, 문자당 8비트)로 전송됩니다.

직렬 콘솔의 GRUB2 설정을 확인하고 업데이트

커널 파라미터 console=tty0 및 console=ttyS0,115200을 /etc/default/grub 파일의 GRUB_CMDLINE_LINUX_DEFAULT 줄에 추가

다음 단계를 완료하십시오.

  1. chroot의 텍스트 편집기로 /etc/default/grub 파일을 엽니다. 예를 들어 nano 또는 vi 편집기를 사용하려면 다음 명령 중 하나를 실행합니다.

    [root ~]$ nano /etc/default/grub
    [root ~]$ vi /etc/default/grub
  2. GRUB_CMDLINE_LINUX_DEFAULT로 시작하는 줄을 찾습니다. 줄은 다음과 비슷하게 표시됩니다.

    GRUB_CMDLINE_LINUX_DEFAULT="quiet splash"
  3. 커널 파라미터 console=tty0 및 console=ttyS0,115200을 이 줄에 추가합니다. 공백을 입력하여 이러한 커널 파라미터를 현재 파라미터와 구분합니다. 업데이트된 줄은 다음과 비슷하게 표시됩니다.

    GRUB_CMDLINE_LINUX_DEFAULT="quiet splash console=tty0 console=ttyS0,115200"
  4. 변경 내용을 저장하고 텍스트 편집기를 종료합니다.

  5. GRUB 구성을 업데이트하려면 다음 명령을 실행합니다.

    Red Hat, CentOS, Amazon Linux, Rocky Linux의 경우

    BIOS 기반 시스템의 경우:

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

    UEFI 기반 시스템의 경우:

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

    Ubuntu 및 Debian의 경우

    다음 명령은 새 커널 파라미터를 사용하여 GRUB 구성 파일을 재생성합니다.

    [root ~]$ update-grub
  6. chroot를 종료하고 /dev, /run, /proc, /sys를 마운트 해제하려면 다음 명령을 실행합니다.

    [root ~]$ exit; umount -fl /mnt/{dev,proc,run,sys,}
  7. Amazon EC2 콘솔에서 인스턴스를 선택한 다음 복구 인스턴스를 선택합니다.

  8. 인스턴스 상태, 인스턴스 중지를 선택한 다음 예, 중지를 선택합니다.

  9. 루트 볼륨 id-#####(손상된 인스턴스의 볼륨)를 복구 인스턴스에서 분리합니다.

  10. 루트 볼륨을 손상된 인스턴스에 루트 볼륨(/dev/sda1)으로 연결한 다음 인스턴스를 시작합니다.

  11. 브라우저 기반 클라이언트를 사용하여 EC2 인스턴스의 직렬 콘솔에 연결합니다.

  12. 루트 사용자와 이전에 설정한 암호를 사용하여 로그인합니다.

AWS 공식업데이트됨 2년 전