내용으로 건너뛰기

처음 인스턴스를 시작한 후 SSH 키 페어를 분실한 경우 Amazon EC2 인스턴스에 연결하려면 어떻게 해야 합니까?

5분 분량
0

Amazon Elastic Compute Cloud(Amazon EC2) 인스턴스에 연결하고 싶지만 SSH 키 페어를 분실했습니다.

간략한 설명

SSH 키 페어를 분실한 경우 EC2 인스턴스에 연결하려면 다음 방법 중 하나를 사용하십시오.

  • 사용자 데이터를 입력하여 새 키 페어를 만듭니다.
  • 관리형 노드인 인스턴스의 경우 AWS Systems Manager를 사용하여 키 페어를 복구합니다.
  • Amazon Linux 2(AL2) 버전 2.0.20190618 이상 또는 Amazon Linux 2023(AL2023)을 실행하는 인스턴스의 경우 EC2 Instance Connect를 사용합니다.
  • 인스턴스에 연결할 수 있고 EC2 직렬 콘솔에 액세스할 수 있는 경우 직렬 콘솔을 사용합니다.
    참고: 이 방법은 인스턴스를 중지하고 시작할 필요가 없습니다.
  • 복구 인스턴스를 만들어 새 퍼블릭 키를 만듭니다.

중요: 인스턴스를 중지하고 시작하기 전에 다음 작업을 수행하십시오.

참고: 인스턴스를 중지하고 시작할 때 인스턴스의 퍼블릭 IP 주소가 변경됩니다. 퍼블릭 IP 주소 대신 탄력적 IP 주소를 사용하여 외부 트래픽을 인스턴스로 라우팅하는 것이 좋습니다.

해결 방법

참고: AWS Command Line Interface(AWS CLI) 명령을 실행할 때 오류가 발생하면 AWS CLI의 오류 해결을 참조하십시오. 또한 최신 AWS CLI 버전을 사용하고 있는지 확인하십시오.

사용자 데이터 스크립트 입력

중요: 민감한 데이터를 사용자 데이터 스크립트에 저장하지 마십시오. 대신 AWS Secrets Manager와 같은 안전한 방법을 사용하십시오.

인스턴스에서 cloud-init에 액세스할 수 없거나 cloud-init 문제가 발생하는 경우 복구 인스턴스 사용을 진행하십시오.

새 키 페어 생성

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

  1. 새 키 페어를 만듭니다.
  2. Amazon EC2 콘솔에서 프라이빗 키를 만드는 경우 키 페어의 퍼블릭 키를 검색합니다.
  3. Amazon EC2 콘솔을 엽니다.
  4. 인스턴스를 중지합니다.
  5. 작업을 선택하고 인스턴스 설정을 선택합니다.
  6. 사용자 데이터 편집을 선택하고 다음 스크립트를 입력합니다.
    Content-Type: multipart/mixed; boundary="//"
    MIME-Version: 1.0
    
    --//
    Content-Type: text/cloud-config; charset="us-ascii"
    MIME-Version: 1.0
    Content-Transfer-Encoding: 7bit
    Content-Disposition: attachment; filename="cloud-config.txt"
    
    #cloud-config
    cloud_final_modules:
    - [users-groups, once]
    users:
    - name: username
    ssh-authorized-keys:
    - PublicKeypair
    참고: username기본 사용자 이름 또는 이전에 만든 사용자 지정 사용자 이름으로 바꾸십시오. PublicKeypair를 퍼블릭 키로 바꾸십시오. 전체 퍼블릭 키를 입력할 때는 ssh-rsa로 시작하십시오.
  7. 저장을 선택합니다.
  8. 인스턴스를 시작합니다.

cloud-init 단계가 완료되었는지 확인

인스턴스 콘솔 출력에서 다음 요소를 확인하여 cloud-init 단계가 완료되었는지 확인합니다.

  • 오류 메시지가 없습니다.
  • 모든 cloud-init 지시문이 실행됨으로 나열됩니다.
  • cloud-init의 경우 다음 예와 비슷한 완료 메시지가 표시됩니다. "Finished [0;1;39mCloud-init: Final Stage[0m Cloud-init v. A.B.C finished at ..".

인스턴스의 사용자 데이터에서 명령 제거

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

  1. 인스턴스를 중지합니다.
  2. 작업을 선택하고 인스턴스 설정을 선택합니다.
  3. 사용자 데이터 편집을 선택한 다음, 필드의 모든 내용을 지웁니다.
  4. 저장을 선택합니다.
  5. 인스턴스를 시작합니다.

Systems Manager 사용

Systems Manager에서 관리형 노드인 인스턴스를 복구하려면 AWSSupport-ResetAccess 런북을 사용하여 키 페어를 복구하십시오. AWSSupport-ResetAccessEC2Rescue를 사용하여 인스턴스에 새 SSH 키 페어를 자동으로 생성하고 추가합니다.

Systems Manager는 인스턴스의 새 SSH 프라이빗 키를 암호화하여 AWS Systems Manager의 기능인 Parameter Store/ec2rl/openssh/instance_id/key로 저장합니다.

Parameter Store에서 프라이빗 SSH 키를 가져오려면 get-parameters AWS CLI 명령을 실행합니다.

aws ssm get-parameters --names "/ec2rl/openssh/instance_id/key" --with-decryption --output json --query  "Parameters[0].Value" | sed 's:\\n:\n:g; s:^"::; s:"$::' >  key-pair-name

참고: instance_id를 인스턴스 ID로 바꾸고 key-pair-name을 키 페어 이름으로 바꾸십시오.

그런 다음, 파라미터 값을 내용으로 하여 새 .pem 파일을 만듭니다. .pem 파일을 사용하여 연결할 수 없는 인스턴스에 다시 연결하십시오.

프라이빗 키를 .pem 파일로 변환하려면 다음 명령을 실행합니다.

ssh-keygen -f key-pair-name -e -m pem > key-pair-name.pem

참고: key-pair-name을 키 페어의 이름으로 바꾸십시오.

자동화 런북은 암호로 활성화된 백업 Amazon Machine Image(AMI)를 만듭니다. Amazon EC2에서는 새 AMI가 자동으로 삭제되지 않으므로 AWS 계정에 그대로 남아 있습니다.

AMI를 찾으려면 다음 단계를 완료하십시오.

  1. Amazon EC2 콘솔을 엽니다.
  2. AMI를 선택합니다.
  3. 검색 필드에 자동화 ID를 입력합니다.

EC2 Instance Connect 사용

Amazon Linux 인스턴스에 연결하려면 EC2 Instance Connect를 사용하여 Linux 인스턴스에 연결을 참조하십시오.

EC2 직렬 콘솔 사용

Linux용 EC2 직렬 콘솔에 액세스할 수 있는 경우 해당 콘솔을 사용하여 지원되는 Nitro 기반 인스턴스 유형의 문제를 해결합니다. 자세한 내용은 EC2 직렬 콘솔 액세스 구성을 참조하십시오.

복구 인스턴스 사용

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

  1. 인스턴스를 중지합니다.

  2. 인스턴스에서 루트 EBS 볼륨을 분리합니다.

  3. 원본 인스턴스와 동일한 가용 영역에서 복구 인스턴스를 시작합니다.

  4. 복구 인스턴스에 원본 인스턴스의 루트 볼륨을 보조 볼륨으로 연결합니다.

  5. 복구 인스턴스를 시작합니다.

  6. 루트 볼륨 디바이스 이름을 가져오려면 다음 명령을 실행합니다.

    sudo lsblk -f

    출력 예시:

    NAME FSTYPE LABEL UUID MOUNTPOINT
    xvda └─xvda1 xfs 1234abcd-56ef-78gh-90ij-1234klmnopqr /
     xvdf └─xvdf1 xfs abcd1234-ef56-gh78-ij90-qr1234klmnop
  7. 연결된 볼륨을 복구 인스턴스에 마운트하려면 다음 명령을 실행합니다.

    sudo mkdir /mnt/target
    sudo mount /dev/xvdf1 /mnt/target

    참고: /dev/xvdf1을 원본 인스턴스의 루트 볼륨 디바이스 이름으로 바꾸십시오.

  8. 새 퍼블릭 키를 만들려면 다음 명령을 실행합니다.

    sudo mkdir -p /mnt/target/home/USER/.ssh
    echo "your_new_public_key" | sudo tee -a /mnt/target/home/USER/.ssh/authorized_keys

    참고: USER를 원래 인스턴스의 사용자 이름으로, your_new_public_key를 퍼블릭 키로 바꾸십시오. 퍼블릭 키 이름은 ssh-rsa로 시작합니다.

  9. 인스턴스의 키에 대한 액세스를 구성하려면 다음 명령을 실행합니다.

    OS_USER=os-user
    sudo chown -R $OS_USER:$OS_USER /mnt/target/home/$OS_USER/.ssh
    sudo chmod 700 /mnt/target/home/$OS_USER/.ssh
    sudo chmod 600 /mnt/target/home/$OS_USER/.ssh/authorized_keys

    참고: os-user인스턴스 시작에 사용한 AMI와 연결된 사용자 이름으로 바꾸십시오.

  10. 볼륨을 마운트 해제하려면 다음 명령을 실행합니다.

sudo umount /mnt/target
  1. 볼륨을 복구 인스턴스와 분리하고 원래 인스턴스에 다시 연결합니다.
  2. 원본 인스턴스를 시작합니다.