Amazon Ec2 인스턴스로 SSH 시도-권한 오류


745

이것은 아마도 일부에게는 어리석은 간단한 질문 일 것입니다 :)

Amazon EC2에서 새 Linux 인스턴스를 만들었으며 그 일부로 .pem 파일을 다운로드하여 SSH에 연결할 수 있습니다.

내가 ssh하려고 할 때 :

ssh -i myfile.pem <public dns>

나는 얻었다 :

@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@         WARNING: UNPROTECTED PRIVATE KEY FILE!          @
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
Permissions 0644 for 'amazonec2.pem' are too open.
It is recommended that your private key files are NOT accessible by others.
This private key will be ignored.
bad permissions: ignore key: amazonec2.pem
Permission denied (publickey).

이 게시물에 이어 pem 파일을 chmod +600하려고했지만 이제는 ssh 일 때 얻을 수 있습니다.

Permission denied (publickey).

여기에서 어떤 남학생 오류가 발생합니까? .pem 파일은 내 홈 폴더 (osx)에 있습니다. 권한은 다음과 같습니다.

-rw-------@   1 mattroberts  staff    1696 19 Nov 11:20 amazonec2.pem

2
이 오류는 잘못된 pem 파일을 사용하는 경우에도 발생합니다.
Rahul Prasad

또한 인스턴스를 생성 한 후 사용하도록 지정된 키로 키 페어를 선택했는지 확인하십시오. 나는 다른 방법으로 이것을했다.
Gary

WinSCP를 사용하는 Windows에 있습니다. 없다 아무chmod 400 myfile.pem그것이 사용하기 때문에 myfile.ppkPEM을 파일에서 인 PuTTYgen에 의해 생성 된.
Chetabahana

이 오류는 올바른 사용자로 로그인하지 않은 경우에도 발생할 수 있습니다.)
andrea06590

답변:


1460

파일에 잘못된 모드가 있습니다.

실행하여 쉽게 해결-

chmod 400 mykey.pem

아마존의 지침에서 발췌-

SSH가 작동하려면 키 파일을 공개적으로 볼 수 없어야합니다. 필요한 경우 다음 명령을 사용하십시오. chmod 400 mykey.pem

400은 소유자 만 읽을 수 있도록하여 보호합니다.


3
정말 고마워! chmod 400의 기능은 무엇입니까? mykey.pem에?
코스타

19
400은 소유자 만 읽을 수 있도록하여 보호합니다.
Kof

1
이 후 ssh -l USERNAME_HERE -i .ssh / yourkey.pem public-ec2-host를 수행하면 "경고 : ID 파일 blabla.pem에 액세스 할 수 없음 : 해당 파일 또는 디렉토리가 없습니다"라는 메시지가 표시됩니다.
coolcool1994

3
이 명령 ssh -i YOUR_PEM_FILE.pem ec2-user@YOUR_IP은 문제를 해결했습니다. 아마 이것은 대답이 될 것입니다 ...
c4k

1
Windows에서 어떻게 동일하게 실행할 수 있습니까?
Ahsan Mukhtar

262

잘못된 사용자 이름을 사용하여 로그인 한 것 같습니다.

  • 대부분의 우분투 이미지에는 사용자가 있습니다 ubuntu
  • 아마존의 AMI는 ec2-user
  • 대부분의 데비안 이미지에는 root또는admin

로그인하려면 ssh 명령을 조정해야합니다.

ssh -l USERNAME_HERE -i .ssh/yourkey.pem public-ec2-host

HTH


30
또는 ssh -i key.pem ubuntu @ servername
jsh

43
오류 메시지에 모두 나와 있습니다. .pem 인증서 파일이 충분히 보호되지 않았습니다. 아래 제안 된대로 chmod 400 xyz.pem을 수행하십시오.
allprog

1
@allprog 나를 위해 이것은 단지 그것을 말하고 Permission denied (publickey).다른 아무것도 발생 하지 않습니다 ...
Aram Kocharyan

1
문제를 발견했습니다. 인스턴스를 생성 한 것과 동일한 키를 사용하지 않았습니다.
Aram Kocharyan

12
이것은 해결책이 아닙니다. 다운로드 한 키 파일의 파일 권한은 기본적으로 844입니다. 400 chmod 500 <path_to_pem_file>이어야합니다.
Elad Meidar

62

나는 이것이 게임에 매우 늦다 는 것을 알고 있지만 ... 항상 나에게 효과적이다.

1 단계

ssh-add ~/.ssh/KEY_PAIR_NAME.pem

2 단계 : 간단히 ssh :)

ssh user_name@<instance public dns/ip>

예 :

ssh ec2-user@ec2-198-51-100-1.compute-1.amazonaws.com

이것이 누군가를 돕기를 바랍니다.


"ssh-add"는 * .pem 파일을 ~ / .ssh 폴더로 복사하는 것과 동일합니까?
아렉 쿠스

1
>> * .pem 파일을 ~ / .ssh 폴더로 복사하기 동일하지 않습니다. 폴더에 추가 한 다음 ssh-add 명령을 실행해야합니다.
super_p

게임에 매우 늦었지만 설명을 추가하려면 ... 1. ~ / .ssh 디렉토리에 .pem 파일을 추가하고 (필요한 경우 작성), 2. ssh-add 명령을 사용하여 인증에 ID를 추가하십시오. 에이전트; 이것은 ssh를 사용할 때 .pem 파일을 지정할 필요가 없음을 의미합니다
Ian Atkin

2
ssh-add 후 ¬ / .ssh / key.pem; 오류 가져 오기 인증 에이전트에 대한 연결을 열 수 없습니다. 평가 ssh-agent -s보고서 SSH_AGENT_PID = 3409; ssh-add는 위와 같은 오류를 발생시킵니다 ......... 여기의 도움 plz
Tariq

와우. 앞으로 VPS와의 모든 연결에 매우 편리합니다. 고마워 친구 :)
Ahmad Mushtaq

36

좋아, 나를 위해 일한 유일한 것은 :

  1. 키의 권한 변경

    chmod 400 mykey.pem

  2. ec2-user 및 올바른 ec2-99 ... 주소 를 사용하여 로그인해야 합니다. EC2-99 주소는 로그인되어 있고 인스턴스가 표시 될 때 AWS 콘솔 하단에 있습니다.

    ssh -i mykey.pem ec2-user@ec2-99-99-99-99.compute-1.amazonaws.com


ec2-99 주소를 찾을 수 없습니다. 제발 날 좀 도와 줄 수 있니?
Adil Malik

1
우분투와 chmod를 400 mykey.pem 로그인은 다음과 ssh를 -i mykey.pem ubuntu@SERVER.amazonaws.com
갈 Bracha의

27

이 기사를 살펴보십시오 . 공용 DNS를 사용하지 않고 양식을 사용하십시오.

ssh -i your.pem root@ec2-XXX-XXX-XXX-XXX.z-2.compute-1.amazonaws.com

AMI 패널에서 이름이 보이는 곳


기사를 건배, 매우 유용합니다!
매트 로버츠

사소한 개선 : root aws로 로그인하려고하면 다음과 같은 메시지가 나타납니다. "루트 사용자가 아닌 ec2-user 사용자로 로그인하십시오."
Andre Schweighofer

ec2-XXX-XXX-XXX-XXX.z-2.compute-1.amazonaws.com이 무엇인지 어떻게 알 수 있습니까?
아렉 쿠스

관리 콘솔> EC2> 인스턴스를 선택하고 인스턴스를 선택하십시오.
renick

'root @'는이 답변에서 다른 모든 사람들이 누락 한 것입니다. 당신이 도와주었습니다! 그리고 chmod.
lordB8r


13

Windows에서는 pem 파일의 속성으로 이동하여 보안 탭으로 이동 한 다음 고급 단추로 이동할 수 있습니다.

상속과 모든 권한을 제거하십시오. 그런 다음 자신에게 모든 권한을 부여하십시오. 모든 SSL에서 동일한 오류가 다시 발생하지는 않습니다.


7

이 질문에 이미 답변을했지만 모두 시험해 본 사용자에게는 여전히 "거부 된 권한 (공개 키)"이 표시됩니다. SUDO로 명령을 실행하십시오. 물론 이것은 임시 솔루션이므로 권한을 올바르게 설정해야하지만 최소한 현재 사용자가 필요한 권한으로 실행하고 있지 않다는 것을 알 수 있습니다 (예상 한대로)

sudo ssh -i amazonec2.pem ec2-xxx-xxx-xxx-xxx.us-west-2.compute.amazonaws.com

이렇게하면 다음과 같은 메시지가 나타납니다.

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

어느 것도 드물게 문서화되어 있습니다. 이 경우에는 다음과 같이하십시오 :

sudo ssh -i amazonec2.pem ec2-xxx-xxx-xxx-xxx.us-west-2.compute.amazonaws.com -l ec2-user

그리고 당신은 영광을 얻을 것입니다 :

   __|  __|_  )
   _|  (     /   Amazon Linux AMI
  ___|\___|___|

2
감사합니다 .. 위에서 언급 한 모든 옵션을 시도한 후에도 여전히 오류가 발생했습니다. sudo와 함께 ssh를 실행하면 나를 위해 일했습니다.
Gursharan Singh

왜 이것을 sudo에서 실행 해야하는지 알고 싶습니다. chmod 400 xyz.pem을 시도했지만 도움이되지 않았습니다.
사무엘 도밍 게즈

6

Mac 터미널에서 "chmod 400 xyz.pem"을 수행해도 도움이되지 않고 권한이 거부되었다고 계속 말하였습니다. 우분투 사용자의 경우 제안 할 것입니다

  1. ssh-add xyz.pem
  2. ssh -i xyz.pem ubuntu@ec2-54-69-172-118.us-west-2.compute.amazonaws.com (사용자는 우분투입니다)

4

SSH 키 및 파일 권한 모범 사례 :

  • .ssh 디렉토리-0700 (소유자 만)
  • 개인 키 /.pem 파일-0400 (소유자 만 읽음)
  • 공개 키 /.pub 파일-0600 (소유자 만 읽고 쓰기)

    chmod XXXX file/directory


3

ssh -i /.pem user @ host-machine-IP

잘못된 자격 증명을 입력했거나 개인 키가 아닌 공개 키를 사용 중이거나 ALL이 ssh에 대해 포트 권한이 열려 있기 때문입니다. 이것은 아마존에게 나쁘다.


3

PuTTY를 사용한 대체 로그인. 좋지만 몇 단계가 필요합니다.

  1. EC2 인스턴스를 처음 만들 때 생성 된 .pem을 가져옵니다.
  2. PuTTY가 .pem을 읽지 않으므로 PuttyGen을 사용하여 .pem 파일 .ppk를 변환하십시오 .
  3. PuTTY를 열고 인스턴스 사용자 이름 + 퍼블릭 DNS 인 호스트 이름 을 입력하십시오 (예 : ubuntu@ec2-xxx-xxx-xxx-xxx.region.compute.amazonaws.com). AWS 계정 사용자 이름이 아닙니다.
  4. 그런 다음 연결> SSH> 인증으로 이동하십시오 . 그런 다음 .ppk 파일을 추가하십시오 . "인증을위한 개인 키 파일" 이라고 표시된 찾아보기를 클릭하십시오 .
  5. 열기를 클릭하면 즉시 연결을 설정할 수 있습니다.

Windows에서 PuTTY 0.66을 사용하고 있습니다.


이것은 작동하지만 명령 줄에서 ssh 연결을 직접 작동시키는 방법이 있습니까?
Ariel

3

다른 답변 외에도이 작업을 수행하기 위해 내가 한 일이 있습니다.

  • 다음을 수행하지 않은 경우 키를 .ssh 폴더에 복사하십시오.

cp key.pem ~/.ssh/key.pem

  • 키에 적절한 권한을 부여하십시오

chmod 400 ~/.ssh/key.pem

eval `ssh-agent -s` ssh-add

  • 그런 다음 키를 추가하십시오.

ssh-add ~/.ssh/key.pem

이제 EC2를 ssh 할 수 있어야합니다 (:


2

chmod 400 yourkeyfile.pem 수행 인스턴스가 Amazon Linux 인 경우 ssh -i yourkeyfile.pem ec2-user @ ip for ubuntu를 사용하십시오. ssh -i yourkeyfile.pem ubuntu @ ip for centos ssh -i yourkeyfile.pem centos @ ip


2

이 오류 뒤에 세 가지 이유가있을 수 있습니다.

  1. 잘못된 키를 사용하고 있습니다.
  2. 키에 올바른 권한이 없습니다. 400으로 chmod해야합니다.
  3. 잘못된 사용자를 사용하고 있습니다. Ubuntu 이미지에는 사용자 ubuntu가 있고 Amazon의 AMI는 ec2-user 이며 데비안 이미지에는 root 또는 admin이 있습니다

2

내 문제는 내 .pem 파일이 NTFS 파티션 중 하나에 있다는 것입니다. 나는 그것을 리눅스 파티션 (ext4)으로 옮겼다.

다음을 실행하여 필요한 권한을 부여하십시오.

chmod 400 my_file.pem

그리고 효과가있었습니다.


2

글쎄, 귀하의 게시물 설명을 보면 2 가지 실수가 있다고 생각합니다.

  1. 개인 키에 대한 올바른 권한을 설정하십시오 . 아래 명령은 올바른 파일 퍼미션 설정에 도움이됩니다.

    chmod 0600 mykey.pem

  2. 로그인하려는 EC2 사용자가 잘못되었습니다 .

    디버그 로그를 보면 Amazon Linux 인스턴스를 생성했다고 생각합니다. 해당 인스턴스 유형의 기본 사용자는 ec2-user입니다. 인스턴스가 우분투라면 기본 사용자는이었습니다 ubuntu.

    ssh -i privatekey.pem default_ssh_user@server_ip

Note:
   For an Amazon Linux AMI, the default user name is ec2-user.

   For a Centos AMI, the default user name is centos.

   For a Debian AMI, the default user name is admin or root.

   For a Fedora AMI, the default user name is ec2-user or fedora.

   For a RHEL AMI, the default user name is ec2-user or root.

   For a SUSE AMI, the default user name is ec2-user or root.

   For an Ubuntu AMI, the default user name is ubuntu.

   Otherwise, if ec2-user and root don't work, check with the AMI provider.

출처 : https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/AccessingInstancesLinux.html


1

점검표 :

  1. 올바른 개인 키 .pem 파일을 사용하고 있습니까?

  2. 권한이 올바르게 설정되어 있습니까? (제 Amazon 브랜드 AMI는 644에서 작동하지만 Red hat은 600 또는 400 이상이어야합니다. Ubuntu에 대해 모릅니다.)

  3. ssh 줄에 올바른 사용자 이름을 사용하고 있습니까? 아마존 브랜드 = "ec2-user", Red Hat = "root", Ubuntu = "ubuntu". "ssh -i pem usename @ hostname"또는 "ssh -l username -i pem hostname"으로 사용자를 지정할 수 있습니다.


1

pem 파일의 권한을 허용 된 사용자 만 허용하는 0600으로 변경하면 매력처럼 작동합니다.

sudo chmod 0600 myfile.pem

그런 다음 ssh를 시도하면 완벽하게 작동합니다.

ssh -i myfile.pem <<ssh_user>>@<<server>>

1

기본적으로 pem 키를 허용하지 않습니다. 권한을 변경하기 만하면됩니다.

chmod 400 xyz.pem

우분투 인스턴스 인 경우 다음을 사용하여 연결하십시오.

ssh -i xyz.pem ubuntu@ec2-youraws.amazonaws.com


1

키 파일은 공개적으로 볼 수 없으므로 권한 400을 사용하십시오.

chmod 400 keyfile.pem

위의 명령에 권한 오류가 표시되면

sudo chmod 400 keyfile.pem

이제 ec2 시스템으로 ssh하십시오. 그래도 문제가 발생하면 ec2-user를 사용하십시오.

ssh -i keyfile.pem ec2-user@ec2-12-34-56-78.compute-1.amazonaws.com


1

.400은 소유자 만 읽을 수 있도록하여 보호합니다.
ASW 안내서에서 답변을 찾을 수 있습니다.

chmod 400 yourPrivateKey.pem

여기에 이미지 설명을 입력하십시오


0

다음은 Linux 사용자가 .pem 파일을 사용하여 서버에 연결하는 간단한 단계입니다.

1 단계 : pem 파일의 위치로 이동하여 홈 .ssh 위치로 복사하십시오.

cp example.pem ~/.ssh/example.pem

2 단계 : 권한 변경

chmod 400 ~/.ssh/example.pem

3 단계 : 다음 명령을 실행하십시오.

ssh -i ~/.ssh/example.pem ec2-user@host.com

이 명령이 너무 길어서 다음 명령을 사용하여 별칭을 만들 수 있습니다.

 vim ~/.bashrc

마지막에 다음과 같은 방식으로 동일한 명령을 작성하십시오.

alias sshConnect='ssh -i ~/.ssh/example.pem ec2-user@host.com'

이제 시스템을 다시 시작하고 sshConnect서버와 연결 하는 데 사용하십시오.


0

aws pem 키의 권한 문제 일뿐입니다.

아래 명령을 사용하여 pem 키의 권한을 400으로 변경하십시오.

chmod 400 pemkeyname.pem

파일의 권한을 변경할 권한이 없으면 아래 명령과 같이 sudo를 사용할 수 있습니다.

sudo chmod 400 pemkeyname.pem

이것이 잘 작동하기를 바랍니다.


0

이 문제 뒤에 두 가지 이유가 있습니다

1) 액세스 키에 올바른 권한이 없습니다. 기본 권한이있는 pem 키는 보안 연결을 할 수 없습니다. 권한을 변경하기 만하면됩니다.

chmod 400 xyz.pem

2) 또한 적절한 사용자 자격 증명으로 로그인했는지 확인하십시오. 그렇지 않으면 연결 중에 sudo를 사용하십시오.

sudo ssh -i {keyfile} ec2-user @ {원격 호스트의 IP 주소}


0

SSH가 작동하려면 키를 공개적으로 볼 수 없어야합니다. 필요한 경우이 명령을 사용하십시오.

chmod 400 Interview-apps.pem

Connect to your instance using its Public DNS:

ec2-**-***-***-***.us-west-2.compute.amazonaws.com

예:

ssh -i "Interview-apps.pem" ec2-user@ec2-**-***-***-***.us-west-2.compute.amazonaws.com

0

이 답변이 당신과 관련이 없다면 무시하십시오. 그러나 내 경험상 사람들 은 첫 글자없이Permission denied (publickey) 공개 키 (대상 시스템에) 단순히 붙여 넣었 기 때문에 문제가있는 것을 보았습니다 !

이것은 vim 을 사용 하여 키를 편집 (붙여 넣기) 할 때 발생 합니다. vim 은 기본적으로 명령 모드 ( 삽입 모드 아님) 에서 열리 므로 삽입 모드 (예 :)로 전환하지 않고 키를 붙여 i넣으면 첫 번째 s문자 를 건너 뜁니다.

ssh-rsa <key>

붙여 넣다

sh-rsa <key>

따라서 다른 솔루션을 시도하기 전에 키를 올바르게 붙여 넣었는지 확인하십시오 ! 즉

cat ~/.ssh/id_rsa.pub

확실하다면 다음 단계를 수행하십시오. 상세 모드 (예 : flag -v) 에서 ssh를 시도 하면 실제 문제가 발생할 수 있습니다.

ssh -v -i <private_key> <name>@<ip> -p <port>

참고로 다른 사람들이 이미 언급했듯이 대부분의 경우 빈 ssh 에이전트 (키를 메모리에 유지하는 프로그램)를 시작하고 키를 추가하면 문제가 해결됩니다.

ssh-agent bash
ssh-add <private_key>

-1

나를 위해 이것을 고친 것은 .pem 파일을 apps 디렉토리 내로 옮기는 것이 었습니다. fooapp는 내 앱의 이름입니다. 거기에 직접 넣었습니다.


-2

때때로 폴더에 오류가있을 수 있습니다. 왜 그런지 모르겠다 ...

폴더를 변경하고 다시 시도 할 수 있습니다. 예를 들어 일반적인 폴더 (데스크톱, 다운로드 등)에서 실험 할 수 있습니다.

나는이 방법을 시도하고 일했다.


당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.