Amazon EC2 인스턴스에 대한 SSH 액세스가 종료되면 권한 거부 (퍼블릭 키)


355

Amazon ec2 인스턴스를 사용하고 싶지만 다음 오류가 발생했습니다.

Permission denied (publickey).

키 페어를 만들고 .pem 파일을 다운로드했습니다 .

주어진:

chmod  600 pem file.

그런 다음이 명령

ssh -i /home/kashif/serverkey.pem  ubuntu@ec2-54-227-242-179.compute-1.amazonaws.com

그러나이 오류가 있습니다.

Permission denied (publickey)

또한 filezilla에 연결하여 파일을 업로드 / 다운로드하는 방법은 무엇입니까?


1
- 당신의 두번째 질문, 업로드 / 다운로드 파일에 FileZilla의 연결에 관한, 단계별 지침이 체크 아웃 y2u.be/e9BDvg42-JI
Yasitha Chinthaka

2
"sudo chmod 600 pem 파일"을 사용하지 않았습니까?이 오류가 발생하고 ssh 전에 sudo를 사용해야 함을 의미합니다
felbus

또한 일부 데비안 OS의 경우 사용자 이름은 admin 입니다. 6.5 및 7.0 버전 이상
개발자

2
사용자 이름이 ec2-user인 경우 사용하지 않아야합니다ec2_user :)
grisaitis

2
연결하려는 사용자 에게 $HOME/.ssh/authorized_keys 파일 에 키가 나열되어 있는지 확인하십시오 .
ILMostro_7

답변:


589

이 오류 메시지는 인증에 실패했음을 의미합니다.

다음과 같은 원인이 발생할 수 있습니다.

  1. 잘못된 키로 연결하려고합니다. 이 인스턴스가이 키 쌍을 사용하고 있습니까?
  2. 잘못된 사용자 이름으로 연결하려고합니다. ubuntu우분투 기반 AWS 배포의 사용자 이름이지만 다른 일부에서는ec2-user (또는 admin일부 Debians에, 보그 Kulbida의 대답에 따라) (도 할 수있다 root, fedora아래 참조)
  3. 잘못된 호스트를 연결하려고합니다. 로그인하려는 올바른 호스트입니까?

참고 1. 당신이 엉망 경우도 발생합니다 /home/<username>/.ssh/authorized_keys당신의 EC2 인스턴스에 파일을.

에 대해 2., 어떤 사용자 이름을 사용해야하는지에 대한 정보가 종종 AMI 이미지 설명에서 부족합니다. 그러나 AWS EC2 설명서에서 요점을 찾을 수 있습니다 4.. http://docs.aws.amazon.com/AWSEC2/latest/UserGuide/AccessingInstancesLinux.html

ssh 명령을 사용하여 인스턴스에 연결하십시오. 개인 키 (.pem) 파일과 user_name @ public_dns_name을 지정합니다. Amazon Linux의 경우 사용자 이름은 ec2-user입니다. RHEL5의 경우 사용자 이름은 root 또는 ec2-user 입니다. Ubuntu의 경우 사용자 이름은 ubuntu 입니다. Fedora의 경우 사용자 이름은 fedora 또는 ec2-user 입니다. SUSE Linux의 경우 사용자 이름은 root 입니다. 그렇지 않으면 ec2-user 및 root가 작동하지 않으면 AMI 공급자에게 문의하십시오.

마지막으로 인증이 실패하는 다른 많은 이유가 있다는 점에 유의하십시오. SSH는 일반적 -v으로이 질문에 대한 다른 많은 답변에서 설명 된 것처럼 SSH 명령에 옵션을 추가 하고 출력을 읽으려는 경우 무엇이 잘못되었는지에 대해 매우 분명 합니다.


2
인터페이스에서 실행중인 인스턴스에 키를 추가 할 수 있다고 생각하지 않으므로 실행중인 인스턴스의 키를 잃어 버린 경우 새 인스턴스를 시작해야합니다.
Thibault D.

81
# 2 고맙습니다!
rckehoe

4
이 대답은 나를 위해 해결했습니다. 이 인스턴스의 기본 사용자 이름은 AWS 설명서에서 말한 것처럼 ec2-user가 아니라 "ubuntu"입니다. 'ec2-user@_your_EC2_IP.amazonaws.com
emf

7
# 1, 잘못된 키와 관련하여 ssh 명령 줄에 -v (verbose)를 추가하면 시도중인 키가 표시되어 id_rsa 이외의 다른 이름을 지정했기 때문에 생성 한 키를 시도하지 않았다는 것을 알게되었습니다. 또는 id_dsa.
KC Baltz

3
"우분투는 우분투 기반 AWS 배포의 사용자 이름입니다." ec2-user에게 사용되었으며, 항상 사용자 이름이라고 가정했습니다.
네이트 리드

48

이 경우 키 쌍이 손실되어 문제가 발생합니다. 이것에 대해:

  • 인스턴스에서 키 페어를 변경할 수있는 방법이 없습니다 . 새 키 페어를 사용하는 새 인스턴스를 만들어야합니다.
  • Elastic Beanstalk 의 애플리케이션에서 인스턴스를 사용하는 경우 문제를 해결할 수 있습니다 .

다음 단계를 수행 할 수 있습니다.

  1. AWS Management Console에 액세스
  2. Elastic Beanstalk 탭 열기
  3. 모든 애플리케이션 탭 에서 애플리케이션을 선택하십시오.
  4. 왼쪽 메뉴에서 Configuration을 선택하십시오.
  5. 인스턴스 기어를 클릭하십시오
  6. 에서 서버 양식은 확인 EC2 키 쌍의 입력을하고 새 키 쌍을 선택합니다. 방금 생성 한 새 키 페어를 보려면 목록 을 새로 고쳐야 할 수도 있습니다 .
  7. 저장
  8. Elastic Beanstalk는 새 키 페어와 연결된 새 인스턴스를 생성합니다.

일반적으로 EC2 인스턴스가 인바운드 SSH 트래픽을 허용하도록해야합니다.

이렇게하려면 EC2 인스턴스의 보안 그룹에 대한 특정 규칙을 만들어야합니다. 이 단계를 수행 할 수 있습니다.

  1. AWS Management Console에 액세스
  2. EC2 탭 열기
  3. 에서 인스턴스 목록 관심있는 인스턴스를 선택
  4. 에서 설명 탭 의 이름 첵 보안 그룹 인스턴스가 사용됩니다.
  5. 설명 탭 에서 다시 규칙보기를 클릭하고 보안 그룹에 포트 22의 인바운드 ssh 트래픽 규칙이 있는지 확인하십시오.
  6. 그렇지 않은 경우 네트워크 및 보안 메뉴에서 보안 그룹을 선택하십시오.
  7. 인스턴스에서 사용 하는 보안 그룹을 선택하고 인바운드 탭을 클릭하십시오.
  8. 인바운드 탭의 왼쪽에서 SSH 인바운드 트래픽에 대한 규칙을 작성할 수 있습니다.
    • 새로운 규칙 생성 : SSH
    • 소스 : 인스턴스에 액세스하려는 IP 주소 또는 하위 네트워크
    • 참고 : 인스턴스에 무제한 액세스 권한 을 부여 하려면 0.0.0.0/0 을 지정할 수 있지만 Amazon에서는이 방법을 권장하지 않습니다.
  9. 규칙 추가를 클릭 한 후 변경 사항 적용
  10. SSH를 통해 인스턴스에 연결할 수 있는지 확인하십시오.

이것이 나를 도와 준 누군가를 도울 수 있기를 바랍니다.


1
답의 두 번째 부분이 잘못되었습니다. "권한이 거부되었습니다 (공개 키)"를 얻을 수 없습니다. 방화벽 설정 (보안 그룹)을 올바르게 설정하지 않은 경우 "권한이 거부되었습니다 (공개 키)." SSH의 오류 메시지이며 보안 그룹 구성이 올바르다는 증거입니다. 대신 "ssh : 호스트 xxxx 포트 22에 연결 : 연결이 거부되었습니다"
Thibault D.

간단히 말해 : 오류 메시지는이 문제가 보안 ​​그룹 구성과 관련이 없음을 나타냅니다.
Thibault D.

네가 옳아. 두 번째 부분은 다른 종류의 문제를 다룹니다. 게시물을 수정했습니다.
Matteo Ceserani 2016 년

키를 잃어버린 경우 가능한 해결 방법은 인스턴스의 스냅 샷을 만든 다음 새 키로 새 인스턴스를 시작하는 것입니다. 이 경우 Amazon은 새 공개 키를 .ssh / authorized_keys에 추가하므로 나중에 이전 공개 키를 제거하십시오. (그리고 새로운 것을 제거하지 않도록주의하거나 첫 번째 문제로 돌아갑니다)
Thibault D.

43

이것이 내가 문제를 해결 한 방법입니다

ssh -i <key> ec2-user@<ec2 ip>

1
여기에 대한 열쇠는 호스트의 DNS 주소 대 IP입니다. ec2-user @ <ip>는 나를 위해 일했다.
Zack

1
솔루션도.
Tpojka

26

나는 문제 바로 퍼팅 해결 sudo하기 전에를

sudo ssh -i mykey.pem myec2.amazonaws.com

그러나 올바른 해결책은 먼저 소유권을 변경 한 다음 Janus Troelsen이 말한 것처럼 일반 사용자로 연결하는 것입니다. 내 경우에는 다음과 같습니다.

chown wellington:wellington key.pem

나를 위해 일했습니다 (그러나 일부 패키지를 업데이트해야했습니다)!
user1429980

4
올바른 해결책은 먼저 소유권을 변경 한 다음 일반 사용자로 연결하는 것입니다. 사용하십시오 sudo chown wellington:wellington key.pem.
Janus Troelsen 2014 년

당신이 로그인을 시도하고 있기 때문에 귀하의 경우, 작동하는지 VM 아마존 지원에서 루트 사용자
Taimoor Changaiz

나는 whoami 다음 sudo chown user_name_given_by_whoami xxxx.pem을 수행했다
Chirag Purohit

23

사용해보십시오

sudo ssh -i mykey.pem ubuntu@<ec2_ip_public_dns>

또는

sudo ssh -i mykey.pem ec2-user@<ec2_ip_public_dns>

1
이것은 나를 도왔다. 팁 고마워! : D
jehzlau

22

이 오류의 또 다른 원인은 다음과 같습니다.

사용자의 홈 디렉토리가 그룹 쓰기 가능 인 경우 사용자는 로그인 할 수 없습니다.

(Ubuntu 인스턴스에서 재현되었습니다.)


1
+1 4 시간 전에 읽었 으면 좋겠다 !!! rsync -a가 ec2-user 폴더의 권한을 덮어 쓰는 문제를 해결했습니다.
Michael Hobbs

홈 디렉토리를 mv 한 후 로그인 할 수 없습니다.
Robert Moon

따라서 영향을받는 시스템에 어떻게 로그인합니까? 전혀 로그인 할 수 없습니까?
PKHunter

/ home 디렉토리에 대한 수정 권한도 저에게 효과적입니다. 감사합니다! @AlexPetralia, 귀하의 링크가 끊어졌습니다 = / 그러나 이것에 대해 aws forum에 게시물이 있습니다 : forums.aws.amazon.com/message.jspa?messageID=334402
Liko

Alex Petralia 또는 @Michael Hobbs와 같은 누군가가 이것에 대한 해결책을 다시 게시 할 수 있습니까?
Jakub Langr

7

우분투 12.04 lts 마이크로 인스턴스의 경우 사용자 이름을 옵션으로 설정해야했습니다.

ssh -i pemfile.pem -l ubuntu dns

이것은 나를 위해 일했습니다. 필요한 사용자를 실제로 논의하는 것이 AWS 설명서의 일부가 아니라는 사실에 놀랐습니다.
Ben

7

다음 단계를 수행해야합니다.

  1. Linux를 사용하는 경우 ssh 클라이언트 또는 터미널을여십시오.
  2. 개인 키 파일을 찾아 디렉토리를 변경하십시오.
    cd <path to your .pem file>
  3. 아래 명령을 실행하십시오.
    chmod 400 <filename>.pem
    ssh -i <filename>.pem ubuntu@<ipaddress.com>

경우 ubuntu사용자가 작동하지 않는 경우 다음과 시도 ec2-user.


5

나는 같은 권한으로 인해 오류가 발생했기 때문에 분명히 오류로 고심했다.

key_parse_private2: missing begin marker 

내 상황에서 원인은 현재 사용자의 ssh 구성 파일 (~ / .ssh / config)이었습니다.

다음을 사용하여 :

ssh -i ~/myKey.pem ec2-user@<IP address> -v 'exit'

초기 결과는 다음과 같습니다.

debug1: Reading configuration data /home/ec2-user/.ssh/config
debug1: Reading configuration data /etc/ssh/ssh_config
debug1: /etc/ssh/ssh_config line 56: Applying options for *
debug1: Hostname has changed; re-reading configuration
debug1: Reading configuration data /home/ec2-user/.ssh/config
debug1: Reading configuration data /etc/ssh/ssh_config

... 많은 디버그 라인이 여기에서 잘립니다 ...

debug1: Next authentication method: publickey
debug1: Trying private key: /home/ec2-user/somekey.pem
debug1: key_parse_private2: missing begin marker
debug1: read PEM private key done: type RSA
debug1: Authentications that can continue: publickey
debug1: No more authentication methods to try.

위의 세 번째 줄은 실제 문제가 확인 된 곳입니다. 그러나 디버그 메시지를 아래에서 위의 네 줄로 살펴 보았습니다. 키에는 문제가 없지만 테스트하고 다른 구성을 비교했습니다.

내 사용자 ssh 구성 파일은 아래에 표시된 것처럼 의도하지 않은 전역 설정을 통해 호스트를 재설정합니다. 첫 번째 호스트 행은 주석이 아니어야합니다.

$ cat config
StrictHostKeyChecking=no
#Host myAlias
        user ec2-user
        Hostname bitbucket.org
#        IdentityFile ~/.ssh/somekey
#        IdentitiesOnly yes

Host my2ndAlias
        user myOtherUser
        Hostname bitbucket.org
        IdentityFile ~/.ssh/my2ndKey
        IdentitiesOnly yes

다른 사람이 도움이되기를 바랍니다.


4

우분투 인스턴스를 연결할 때 사용자 이름 (우분투)을 추가하는 것을 잊었습니다. 그래서 나는 이것을 시도했다 :

ssh -i /path/my-key-pair.pem my-ec2-instance.amazonaws.com

올바른 방법은

ssh -i /path/my-key-pair.pem ubuntu@my-ec2-instance.amazonaws.com

합법적 인 초보자 오류. 사용자 이름 추가를 잊어 버린 경우 로컬 컴퓨터에 로그인 한 사용자의 사용자 이름이 사용됩니다.
Thibault D.

3

이것은 여러 번 나에게 일어났다. 프리 티어에있는 Amazon Linux AMI 2013.09.2 및 Ubuntu Server 12.04.3 LTS를 사용했습니다.

인스턴스를 시작할 때마다 권한 거부가 표시됩니다. 나는 이것을 확인하지 못했지만 내 이론은 서버를 ssh하기 전에 서버가 완전히 설정되지 않았다는 것입니다. 권한이 거부 된 몇 번의 시도 후에 몇 분 기다렸다가 연결할 수 있습니다. 이 문제가 발생하면 5 분 정도 기다렸다가 다시 시도하십시오.


나는 5 분을 기다렸다. 그리고 효과가있었습니다. 프리 티어에도 있습니다. 감사합니다
Emeka Mbah

2

이 오류를 발생시키는 가능한 좌절 시나리오는 다음과 같습니다.

다른 인스턴스 (예 : 인스턴스 xyz)로 생성 한 AMI에서 새 인스턴스를 런치 할 경우 새 인스턴스는 인스턴스 A가 사용한 것과 동일한 키만 허용합니다. 이것은 완전히 이해할 수 있지만 새 인스턴스를 만드는 단계별 프로세스 중에 작동하지 않는 키를 (마지막 단계에서) 선택하거나 작성하라는 요청을 받기 때문에 혼란스러워집니다.

생성하거나 선택한 키에 관계없이 XYZ와 같은 인스턴스에 사용했던 키만 새 인스턴스에서 수락합니다.


와우, 나는 이것에 대해 생각한 적이 없다. 이전 키를 사용하면 문제가 해결되었습니다. 감사.
tolgamorf 2014 년

보통 새로운 공개 키를 authorized_keys 파일에 추가하여 둘 다 사용할 수있게합니다. 그래도 테스트한지 오래되었지만 그럴 것으로 예상됩니다.
Thibault D.

2

나는 다음을 발견 할 때 까지이 문제로 잠시 어려움을 겪었습니다.

eb ssh

프로젝트 디렉토리에서 bingo-bango no muss no fuss를 사용하면


2

내 경우에는 다음을 수행했습니다.

chmod 400 <key.pem>

ssh -i <key.pem> ec2-user@ec2_public_dns (for debian)

처음에 root@part를 사용 하고 있었고이 프롬프트가 나타납니다.

Please login as the user "ec2-user" rather than the user "root".

2

WinSCP가 있는 Windows에 있습니다. File Explorer와 PuTTY SSH Shell 모두에서 잘 작동하여 Amazon EC2-VPC Linux 에 액세스 합니다. pem 파일 에서 PuTTYgen에 의해 변환chmod pem file사용하기 때문에 아무 상관이 없습니다 .myfile.ppk


2

나에게도 같은 일이 일어 났지만, 개인 키는 로컬 컴퓨터의 키 체인에서 잃어버린 것입니다.

ssh-add -K

키를 다시 추가 한 다음 ssh 명령을 연결하여 작동하도록 반환했습니다.


다시 시작한 후 매번 발생 하며이 문제를 해결하려면 위의 명령을 다시 실행해야합니다.
silentsudo

1
직접 확인하지는 않았지만 여기에서 확인 된 답변이 도움이 될 수 있습니다. apple.stackexchange.com/questions/254468/…
eiTan LaVi

1

이 문제는 아래 명령을 사용하여 Ubuntu 상자에 로그인하여 해결할 수 있습니다.

ssh -i ec2key.pem ubuntu@ec2-public-IP

1
자세한 내용을 알려주십시오.
Syeda Zunaira '12

1

키와 ssh 명령 줄이 두 번 정확했습니다 (우분투 14.04 인스턴스를 복제하기 때문에 알고 있습니다). 위의 Wade Anderson이 제안한대로 5 분을 기다린 후에도 새 인스턴스로 ssh 할 수 없었습니다.

기계를 파괴하고 다시 만들어야했습니다. 이것은 두 차례에 걸쳐 일어난 일입니다. 처음에 들어갈 수 없기 때문에 무엇이 잘못되었는지 알 수 없습니다.

따라서이 문제가 발생하면 시도해보십시오.


1

다음 몇 가지 사항을 확인해야합니다.

  1. IP 주소가 올바른지 확인하십시오
  2. 올바른 키를 사용하고 있는지 확인하십시오
  3. 올바른 사용자 이름을 사용하고 있는지 확인하십시오. 3.1. 관리자 3.2. ec2-user 3.3. 우분투

나는 같은 문제가 있었고, 사용자 이름을 우분투로 변경 한 후에 해결되었습니다. AWS 설명서에서 ec2-user 사용자에게 언급되었지만 어떻게 든 작동하지 않습니다.


1

내 개인 키가 권한으로 설정 400되어 권한이 거부되어 '644'로 설정하면 도움이되었습니다.

key_load_private_type : 권한 거부 가 발생하는 특정 오류입니다

해결책: Sudo chmod 644 <key.pem>

참고 : 644로 설정해야합니다. 400에서는 작동하지 않았습니다.


1

당신이 시도 할 때

ssh -i <.pem path> root@ec2-public-dns

를 사용하라는 메시지가 표시 ec2-user됩니다.

Please login as the user "ec2-user" rather than the user "root".

그래서 사용

ssh -i <.pem path> ec2-user@ec2-public-dns


1

나는 같은 문제와 매우 이상한했다. 당신이 이것을 잘하는 것보다 모두 잘하고 있다고 믿는다면 : 때때로 EC2 인스턴스의 사용자에 대한 혼란이 있습니다 !! 때때로 당신은 ec2-user, 우분투, centos 등을 얻습니다. 그래서 사용자 이름을 확인하십시오!

루트 사용자로 로그인 ssh -i yourkey.pem (400 permission) root@<ip> 오류가 발생하고 사용 가능한 사용자 이름을 제공합니다 . 그런 다음 해당 사용자로 로그인하십시오.


1

기본 사항이지만 로그인하려는 사용자를 항상 확인하십시오. 내 사건 은 산만했다 . 루트 사용자를 사용하려고했습니다 .

ssh -i ~/keys/<key_name> root@111.111.111.111

그러나 다른 사용자 였습니다 .

ssh -i ~/keys/<key_name> dedeco@111.111.111.111

1

나는 같은 오류가 있지만 상황이 다릅니다. 나에게 그것은 원격 컴퓨터에 성공적으로 ssh 할 수있는 많은 시간 후에 파란에서 일어났습니다. 내 문제에 대한 해결책을 많이 찾은 후에 파일 권한이있었습니다. 내 컴퓨터 또는 ssh의 파일 / 디렉토리에 속한 원격 권한을 변경하지 않았기 때문에 물론 이상합니다. 그래서 좋은 리눅스 리눅스 위키에서 에서 여기 있습니다 :

로컬 머신의 경우 다음을 수행하십시오.

$ chmod 700 ~/
$ chmod 700 ~/.ssh
$ chmod 600 ~/.ssh/id_ecdsa

원격 시스템의 경우 다음을 수행하십시오.

$ chmod 700 ~/
$ chmod 700 ~/.ssh
$ chmod 600 ~/.ssh/authorized_keys

그 후 내 ssh는 권한 거부 (publickey) 일없이 다시 작동하기 시작했습니다.


0

다른 가능한 문제 : 잘못된 로그인 ID

'사용 지침'확인

위의 모든 좋은 제안이지만 내가 만난 것은 미리 만들어진 인스턴스를 선택했다는 것입니다. 인스턴스가 시작된 후 사용법 지시 사항을보십시오. 'bitnami'(예 : bitnami @ domain -i key.pem)를 사용해야 할 때 개인 키의 로그인 ID를 잘못 사용했습니다.


0

나는 비슷한 오류가 있었다

debug1: Authentications that can continue: publickey
debug1: Next authentication method: publickey
debug1: Trying private key: xxxx.pem
debug1: Authentications that can continue: publickey
debug1: No more authentication methods to try.
Permission denied (publickey).

내 문제는 시작시 실행 스크립트의 오류로 인해 인스턴스가 올바르게 시작되지 않았다는 것입니다. Step 3: Configure instance detail 아래Advanced details:

내가 생각한 것 :

#include
 https://xxxx/bootstrap.sh


실제로 입력 한 내용으로 인해 인스턴스 설정이 중단됩니다

#include

https://xxxx/bootstrap.sh

따라서 인스턴스 측의 공개 키가 생성되지 않았습니다.


0

대소 문자를 구분합니다.

잘못 : SSH EC2-user @ XXX.XX.XX.XX -i MyEC2KeyPair.pem

올바른 : SSH ec2-user @ XXX.XX.XX.XX -i MyEC2KeyPair.pem


-1

한 컴퓨터에서 SSH를 할 수 있었지만 다른 컴퓨터에서는 SSH를 할 수 없었습니다. 내가 잘못된 개인 키를 사용하고있는 것으로 나타났습니다.

내가 알아 낸 방법은 다음과 같이 개인 키에서 공개 키를 얻는 것입니다.

ssh-keygen -y -f ./myprivatekey.pem

~/.ssh/authorized_keysEC2 인스턴스의 내용과 일치하지 않습니다 .


-1

위의 모든 최상위 답변은 정확하며 대부분의 경우 작동합니다. 그들이 내 경우와 같지 않은 경우, 나는 단순히 ~/.ssh/known_hostsssh하려는 기계에서 내 파일을 제거 하여 문제를 해결했습니다. 나중에 연결할 수있었습니다.


삭제 known_hosts하면 호스트 키가 변경된 서버에 연결할 때 문제가 해결 되지만 (어쨌든 나쁜 접근 방식이지만) "Permission denied (publickey)" 오류를 해결할 수 없습니다 .
Martin Prikryl
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.