AWS re:Post을(를) 사용하면 다음에 동의하게 됩니다. AWS re:Post 이용 약관

EC2 인스턴스에 액세스할 때 "Permission denied (publickey)" 또는 "Authentication failed, permission denied" 오류 메시지가 나타납니다. 이 문제를 해결하려면 어떻게 해야 하나요?

6분 분량
0

Amazon Elastic Compute Cloud(Amazon EC2) 인스턴스에 액세스할 때 "Permission denied (publickey)" 또는 "Authentication failed, permission denied" 오류 메시지가 나타납니다.

간략한 설명

다음과 같은 경우 “Permission denied (publickey)” 및 “Authentication failed, permission denied” 오류가 발생합니다.

  • AMI에 잘못된 사용자 이름을 사용하여 연결하려고 하는 경우.
  • 운영 체제 내의 파일 권한이 인스턴스에서 올바르지 않은 경우.
  • authorized_keys 파일에 잘못된 SSH 공개 키(.pub) 파일이 있습니다.

해결 방법

AMI에 대해 올바른 사용자 이름을 사용하고 있는지 확인합니다.

유효한 사용자 이름 목록은 Error: Server refused our key or No supported authentication methods available을 참조하세요.

운영 체제 내의 파일 권한이 올바르고 authorized_keys 파일에 올바른 SSH 공개 키가 있는지 확인

다음과 같은 네 가지 방법으로 이러한 작업을 수행할 수 있습니다.

방법 1: EC2 직렬 콘솔 사용

Linux용 EC2 직렬 콘솔을 활성화한 경우 이를 사용하여 지원되는 Nitro 기반 인스턴스 유형의 문제를 해결할 수 있습니다. 직렬 콘솔은 부팅, 네트워크 구성, SSH 구성 문제를 해결하는 데 도움이 됩니다. 직렬 콘솔은 작동하는 네트워크 연결 없이 인스턴스에 연결됩니다. 사용자는 Amazon EC2 콘솔이나 AWS Command Line Interface(AWS CLI)를 사용하여 직렬 콘솔에 액세스할 수 있습니다.

직렬 콘솔을 사용하기 전에 계정 수준에서 직렬 콘솔에 액세스 권한을 부여해야 합니다. 그런 다음 IAM 사용자에게 액세스 권한을 부여하는 AWS Identity and Access Management(IAM) 정책을 생성합니다. 또한 직렬 콘솔을 사용하는 모든 인스턴스에는 적어도 한 명의 암호 기반 사용자가 포함되어야 합니다. 인스턴스에 연결할 수 없고 직렬 콘솔 액세스를 구성하지 않은 경우 방법 2, 3, 4에 안내된 지침을 따르십시오. Linux용 EC2 직렬 콘솔 구성에 대한 자세한 내용을 보려면 EC2 직렬 콘솔 액세스 구성을 참조하세요.

참고: AWS CLI 명령을 실행할 때 오류가 발생하면 최신 AWS CLI 버전을 사용하고 있는지 확인하십시오.

방법 2: AWS Systems Manager Session Manager를 사용하여 인스턴스에 로그인하고 내용을 수정합니다

이 방법은 권한을 업데이트하고 SSH 공개 키를 authorized_keys 파일에 삽입합니다.

**참고:**이 방법을 사용하려면 SSM 에이전트를 설치해야 합니다. 세션 관리자 및 전체 필수 구성 요소 목록에 대한 자세한 내용은 세션 관리자 설정을 참고하세요.

1.    AWS Systems Manager 콘솔을 엽니다.

2.    세션을 시작합니다.

3.    ls -ld 명령을 사용하여 home 디렉터리에 있는 파일의 권한이 올바른지 확인합니다. 다음은 올바른 권한 목록입니다.

  • 예를 들어, Linux 홈 디렉터리인 /home은 **(0755/drwxr-xr-x)**이어야 합니다.
  • 예를 들어, 사용자의 홈 디렉터리인 **/home/ec2-user/**는 **(0700/drwx------)**이어야 합니다.
  • 예를 들어, .ssh 디렉터리 권한(/home/ec2-user/.ssh)은 **(0700/drwx------)**이어야 합니다.
  • 예를 들어 authorized_keys 파일 권한(/home/ec2-user/.ssh/authorized_keys)은 **(0600/-rw-------)**여야 합니다.

다음은 stat 명령과 결과 출력의 예입니다. 이 예에서 ec2-user는 사용자 이름입니다. 특정 AMI에 따라사용자 이름을 변경하세요.

$ ls -ld /home/ec2-user/
drwx------ 3 ec2-user ec2-user 4096 Apr  1 08:31 /home/ec2-user/

4.    로컬 컴퓨터에서 SSH 공개 키를 확인합니다.

5.    출력에 SSH 공개 키의 서명이 없는 경우 authorized_keys 파일을 업데이트하여 SSH 키를 허용합니다. 다음 예에서는 예시 키를 사용자의 SSH 공개 키로 바꿉니다.

$ echo 'ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDVogCW5eZogRp+vF6Ut360b0bYyTmqgYaCXOyiW77I916AS5jFL3zsCtONbGn4hnG/UGGWXpLfUV85qpVJb38fskPZNuyZtjGjXM2W7qqbCZ1N9HBb6IPBaL97tmqBi+8rD7mSkoHc40sIV+KxkQSvD6AAFjQruCjxzfGIApnOvuj6IMsVEuFHBx4QhkbCzafxo02D9BZT4+dMy7tmyuC+UiNEQpgfFoszl+4VNFTIPlQQyn6CpUiV/rFXIadXsHqc+UOdVnfEXP+30YL75RHabze/1F5MY6t94AEcmcb05Dq4vwN9IjcxKmwgvxLOXzryytepvHQU+PobBEXAMPLE' >> /home/ec2-user/.ssh/authorized_keys

6.    권한을 수정하려면 EC2 인스턴스에서 다음 명령을 실행합니다.

$ sudo chown root:root /home
$ sudo chmod 755 /home
$ sudo chown ec2-user:ec2-user /home/ec2-user -R
$ sudo chmod 700 /home/ec2-user /home/ec2-user/.ssh
$ sudo chmod 600 /home/ec2-user/.ssh/authorized_keys

7.    세션을 종료합니다.

8.    SSH를 사용하여 인스턴스에 연결합니다.

방법 3: AWSSupport-TroubleshootSSH 자동화 절차를 실행합니다.

AWSSupport-TroubleshootSSH는 Amazon EC2Rescue 도구를 설치합니다. 설치 후 이 도구는 SSH를 통해 Linux 시스템에 연결할 때 원격 연결 오류를 일으키는 몇 가지 문제를 확인하고 수정합니다. AWSSupport-TroubleshootSSH 자동화 워크플로우를 사용하여 SSH 연결 문제를 해결하려면 어떻게 해야 하나요?를 참조하세요.

방법 4: 사용자 데이터 스크립트를 사용하여 SSH 권한을 복구하고****authorized_keys 파일에 올바른 SSH 퍼블릭 키 추가

중요

  • 인스턴스가 인스턴스 스토어 기반 인스턴스이거나 데이터가 포함된 인스턴스 스토어 볼륨이 있는 경우, 인스턴스가 중지되면 데이터가 손실됩니다. 자세한 내용을 보려면 인스턴스의 루트 디바이스 유형 결정을 참조하세요.
  • 인스턴스가 Amazon EC2 Auto Scaling 그룹에 속한 경우 인스턴스를 중지하면 인스턴스가 종료될 수 있습니다. Amazon EMR, AWS CloudFormation 또는 AWS Elastic Beanstalk를 사용하여 인스턴스를 시작한 경우 인스턴스가 AWS Auto Scaling 그룹의 일부일 수 있습니다. 이 시나리오에서 인스턴스 종료 여부는 Auto Scaling 그룹의 인스턴스 축소 보호 설정에 따라 달라집니다. 인스턴스가 Auto Scaling 그룹의 일부인 경우, 문제 해결 단계를 시작하기 전에 Auto Scaling 그룹에서 일시적으로 인스턴스 제거합니다.
  • 인스턴스를 중지하고 시작하면, 인스턴스의 퍼블릭 IP 주소가 변경됩니다. 외부 트래픽을 인스턴스로 라우팅할 때는 퍼블릭 IP 주소 대신 탄력적 IP 주소를 사용하는 것이 좋습니다.

1.    Amazon EC2 콘솔을 엽니다.

2.    탐색 창에서 인스턴스를 선택한 다음 시작하려는 인스턴스를 선택합니다.

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

4.    작업, 인스턴스 설정, 사용자 데이터 편집을 선택합니다.

5.    다음의 사용자 데이터 스크립트를 사용자 데이터 편집 대화 상자에 복사한 다음 저장을 선택합니다.

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:
- [scripts-user, always]

--//
Content-Type:
    text/x-shellscript; charset="us-ascii"
MIME-Version: 1.0
Content-Transfer-Encoding: 7bit
Content-Disposition: attachment; filename="userdata.txt"

#!/bin/bash
OS_USER=@@@@@@
chown root:root /home
chmod 755 /home
chown $OS_USER:$OS_USER /home/$OS_USER -R
chmod 700 /home/$OS_USER
chmod 700 /home/$OS_USER/.ssh
chmod 600 /home/$OS_USER/.ssh/authorized_keys
--//

참고: OS_USER의 값을 인스턴스를 시작한 AMI와 연결된 사용자 이름으로 바꿉니다. 자세한 내용을 보려면 연결 문제의 일반적인 연결 문제 원인에서 인스턴스를 시작하는 데 사용한 AMI의 기본 사용자 이름 가져오기를 참조하세요.

6.    로컬 컴퓨터에서 SSH 공개 키를 확인합니다.

7.    출력에 SSH 공개 키 서명이 없는 경우, 5단계에서 생성한 사용자 데이터 스크립트에 올바른 키를 추가하십시오. 서명이 일치할 경우, 이 단계를 건너뛰어도 됩니다. 다음 예와 같이 사용자 데이터 스크립트에 SSH 공개 키를 추가합니다. 예제 키를 SSH 공개 키로 바꿉니다.

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:
- [scripts-user, always]

--//
Content-Type:
    text/x-shellscript; charset="us-ascii"
MIME-Version: 1.0
Content-Transfer-Encoding: 7bit
Content-Disposition: attachment; filename="userdata.txt"

#!/bin/bash
OS_USER=@@@@@@
chown root:root /home
chmod 755 /home
chmod 700 /home/$OS_USER
chmod 700 /home/$OS_USER/.ssh
chmod 600 /home/$OS_USER/.ssh/authorized_keys
echo 'ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDVogCW5eZogRp+vF6Ut360b0bYyTmqgYaCXOyiW77I916AS5jFL3zsCtONbGn4hnG/UGGWXpLfUV85qpVJb38fskPZNuyZtjGjXM2W7qqbCZ1N9HBb6IPBaL97tmqBi+8rD7mSkoHc40sIV+KxkQSvD6AAFjQruCjxzfGIApnOvuj6IMsVEuFHBx4QhkbCzafxo02D9BZT4+dMy7tmyuC+UiNEQpgfFoszl+4VNFTIPlQQyn6CpUiV/rFXIadXsHqc+UOdVnfEXP+30YL75RHabze/1F5MY6t94AEcmcb05Dq4vwN9IjcxKmwgvxLOXzryytepvHQU+PobBEXAMPLE' >> /home/$OS_USER/.ssh/authorized_keys
chown $OS_USER:$OS_USER /home/$OS_USER -R
--//

참고: OS_USER의 값을 인스턴스를 시작한 AMI와 연결된 사용자 이름으로 바꿉니다. 자세한 내용을 보려면 연결 문제의 일반적인 연결 문제 원인에서 인스턴스를 시작하는 데 사용한 AMI의 기본 사용자 이름 가져오기를 참조하세요.

8.    인스턴스를 시작합니다.

참고: 이전 사용자 데이터 스크립트는 인스턴스를 재부팅할 때마다 실행되도록 설정되어 있습니다. 인스턴스에 다시 액세스한 후 사용자 데이터 스크립트를 제거합니다.

사용자 데이터를 제거하려면 다음을 수행합니다.

  • 이 섹션의 1~4단계를 완료합니다.
  • 사용자 데이터 편집 대화 상자에서 사용자 데이터 스크립트를 삭제합니다.

관련 정보

SSH를 사용하여 Amazon EC2 Linux 인스턴스에 연결하는 문제를 해결하려면 어떻게 해야 합니까?

개인 키를 잃어버렸습니다. Linux 인스턴스에 연결하려면 어떻게 해야 합니까?

최초 시작 후 SSH 키 페어를 분실했다면 Amazon EC2 인스턴스에 어떻게 연결해야 하나요?

AWS 공식
AWS 공식업데이트됨 2년 전
댓글 없음

관련 콘텐츠