로컬 Ubuntu에서 Amazon EC2 서버로 SSH를 시도 할 때 왜 "Permission denied (publickey)"가 표시됩니까?


218

Amazon EC2 인스턴스의 클라우드에서 실행중인 애플리케이션 인스턴스가 있으며 로컬 Ubuntu에서 연결해야합니다. 로컬 우분투 중 하나와 랩톱에서도 잘 작동합니다. 다른 로컬 우분투에서 SSH를 EC2에 액세스하려고 할 때 "Permission denied (publickey)"메시지가 나타납니다. 나에게 너무 이상하다.

하나의 인스턴스에 대한 IP 액세스가 제한되는 Amazon EC2의 보안 설정과 관련된 일종의 문제 또는 인증서를 재생성해야한다고 생각합니다.

누구든지 해결책을 알고 있습니까?


11
"이전에는 일을했었다"– 무엇을 하기 전에 ?
womble

Elastic Beanstalk EC2 인스턴스가 있습니다. 2013 년 8 월에 솔루션은 Permission Denied (publicKey) 오류를 일으킨 ec2-user 사용자가 인스턴스에 액세스하는 것이 었습니다. Viz : ssh -i ./mike-key-pairoregon.pem ec2-user@ec2-some-address.us-west-2.compute.amazonaws.com. 물론 당신은 stackoverflow.com/questions/4742478/에
mikemay

3
잘못된 사용자 이름을 지정하면이 문제가 발생합니다. aws 문서 ( docs.aws.amazon.com/AWSEC2/latest/UserGuide/… )는 현재 사용자 이름 ec2-user [ssh -i /path/my-key-pair.pem ec2-user @ ec2-198의 예를 제공합니다. -51-100-1.compute-1.amazonaws.com], 내 (오래된) 우분투 상자의 사용자 이름은 우분투이므로 예제를 사용했을 때이 오류가 발생하여 올바른 사용자 이름으로 변경하면 해결됩니다.
david.barkhuizen

@ david.barkhuizen, 귀하의 의견이 도움이되었습니다. 나는 비슷한 문제가 있었다. 사용자 이름과 관련이 있다는 것이 밝혀졌습니다. 감사.
NaijaProgrammer

답변:


143

이 상황에서 가장 먼저해야 할 일은 -v옵션 을 사용하여 ssh시도한 인증 유형과 결과를 확인할 수 있습니다. 그것이 상황을 밝게하는 데 도움이됩니까?

귀하의 질문에 대한 업데이트에서 "다른 로컬 우분투"에 대해 언급했습니다. ssh 개인 키를 다른 시스템으로 복사 했습니까?


2
@Greg가 제안한 것처럼 ssh 개인 키를 다른 컴퓨터에 복사했습니다. 지금 작동합니다. 감사!
Vorleak Chy

3
참고로 -i 플래그를 사용하여 키를 설치하지 않고 키의 경로를 지정할 수 있습니다.
Jorge Vargas

20
필자의 경우 bitnami .ami를 사용하고 있으며 다음과 같이 bitnami라는 사용자로 로그인해야한다는 것을 알지 못했습니다 ssh -i <keyfile> bitname@<ec2-address>. 불행히도이 -v옵션은 이것을 찾는 데 도움이되지 않았지만 여전히 확인하는 것이 좋습니다!
매트 코놀리

7
글쎄, 내 경우에는 잘못된 사용자 이름을 사용하고있었습니다. "bitnami"대신 "ubuntu"를 사용하고있었습니다. ssh -i key.pem bitnami @ hostaddress
Lucas Pottersky

3
좋은 리드는 원격 노드 자체이기도합니다 /var/log/auth.log. 때때로 다음과 같은 메시지가 나타납니다. Authentication refused: bad ownership or modes for file /var/lib/jenkins/.ssh/authorized_keys또는 기타
Jonas Libbrecht

76

명시 적으로 언급되지 않았으므로 sshd는 기본적으로 authorized_keys파일 에 대한 권한에 매우 엄격 합니다. 따라서 사용자 이외의 다른 사람 authorized_keys 있거나 사용자 이외의 다른 사람 이 수있는 경우 인증을 거부합니다 (sshd가로 구성되지 않은 경우 StrictModes no)

"쓰기 가능하게 할 수있다"는 말은 부모 디렉토리 중 하나라도 사용자 이외의 다른 사람이 쓸 수있는 경우 해당 디렉토리를 수정하도록 허용 된 사용자는 authorization_keys를 수정 / 대체 할 수있는 방식으로 권한 수정을 시작할 수 있다는 것입니다.

또한 /home/username/.ssh사용자가 디렉토리를 소유하지 않아서 사용자에게 키를 읽을 수있는 권한이없는 경우 문제가 발생할 수 있습니다.

drwxr-xr-x 7 jane jane 4096 Jan 22 02:10 /home/jane
drwx------ 2 root root 4096 Jan 22 03:28 /home/jane/.ssh

jane는 .ssh파일을 소유하지 않습니다 . 이것을 통해 수정

chown -R jane:jane /home/jane/.ssh

이러한 종류의 파일 시스템 권한 문제는로 표시 ssh -v되지 않으며 로그 수준을 DEBUG로 설정할 때까지 sshd 로그 (!)에도 표시되지 않습니다.

  • 편집 /etc/ssh/sshd_config. LogLevel DEBUG어딘가에 읽는 줄을 원합니다 . 배포판에서 제공하는 메커니즘을 사용하여 SSH 서버를 다시로드하십시오. ( service sshd reloadRHEL / CentOS / Scientific에서) 정상적으로 다시로드해도 기존 세션이 삭제되지 않습니다.
  • 인증을 다시 시도하십시오.
  • 인증 시설 로그의 위치를 ​​파악하고 읽으십시오. (IIRC, /var/log/auth.log데비안 기반 배포판; /var/log/secureRHEL / CentOS / Scientific.)

파일 시스템 권한 오류가 포함 된 디버그 출력의 문제점을 훨씬 쉽게 해결할 수 있습니다. /etc/ssh/sshd_config완료되면 변경 사항을 되 돌리십시오 !


5
"쓰기 가능"비트는 저에게있어
wmarbut

7
주요 파일에 대한 올바른 권한은 600입니다 ( 여기 참조 )
Matt Lyons

1
그러나 내 .authorized_keys 파일은 그룹별로 쓸 수 있었으므로 수락하지 않았습니다.
Aditya MP

2
나는 벽에 머리를 대고 있었다! 내 사용자 폴더에 잘못된 권한이 있습니다. 감사합니다!
XJones 2016 년

4
~ / .ssh 폴더 자체도 마찬가지입니다. 다음과 같은 오류 메시지가 나타날 수 있습니다.Authentication refused: bad ownership or modes for directory
Yevgeniy M.

37

-l옵션 추가를 잊었 기 때문에이 오류가 발생했습니다 . 내 로컬 사용자 이름이 원격 시스템과 다릅니다.

이것은 귀하의 질문에 대한 답변이 아니지만 여기 내 문제에 대한 답변을 찾고 있습니다.


25
ssh host -l user와 동일 ssh user@host합니까?
Znarkus

3
@ Znarkus 예, 동일합니다.
cregox

그래, 이것은 "Permission denied (publickey)"오류를 일으키는 문제를 해결했습니다.
Brooks Moses

1
이것은 나에게 문제였다. 사용자 "root"가 작동 할 것으로 예상했지만 기본 사용자 "ubuntu"가있는 Ubuntu EC2 이미지를 사용하고있었습니다.
Cerin

20

우분투 AMI를 기반으로 한 새로운 인스턴스 에서이 메시지를 받았습니다. PEM을 제공하기 위해 -i 옵션을 사용하고 있었지만 여전히 "Permission denied (publickey)"가 표시되었습니다.

내 문제는 올바른 사용자를 사용하지 않았다는 것입니다. ubuntu @ ec2로 ssh를 실행하면 정상적으로 작동합니다.


그래 ...로 명령을 실행하고 sudo있었기 때문에 작동하지 않습니다.
thaddeusmt

16

ssh -v(물론 내 의견으로는) 보다 읽기 쉬운 것이 tail -f /var/log/auth.log입니다. 연결을 시도하는 동안 연결하려는 서버에서 실행해야합니다. 일반 텍스트로 오류가 표시됩니다.

이것은 내 문제를 해결하는 데 도움이되었습니다.

xx.yy.com의 사용자 [username]은 AllowGroups에 사용자 그룹이 없기 때문에 허용되지 않습니다.


이것은 서버 로그입니다. RHEL / CentOS 7의 경우 :tail -f /var/log/secure
Gianfranco P.

10

/ etc / ssh / sshd_config 파일을 확인하십시오 . 거기에서 말하는 줄을 찾으십시오.

PasswordAuthentication no

이 줄은 no 대신 yes로 수정해야합니다. 또한 나중에 sshd 서버를 다시 시작하십시오.

sudo /etc/init.d/ssh restart

18
그러면 서버의 보안 수준이 떨어집니다.
Znarkus

이것은 내가 가진 문제입니다. 다른 사용자의 계정을 설정하고 비밀번호만으로 인증하고 싶었습니다. 또한 개인 키가없는 곳에서 나 자신으로 로그인 할 수 있기를 원했습니다.
다니엘

1
/etc/ssh/sshd_config서버에 접속할 수 없다면 어떻게 합니까?
kyo

서버 자체에 들어가려면 인스턴스를 만들 때 제공 한 PEM 파일을 사용해야합니다. 지침은 그 이후에 진행됩니다.
Sudipta Chatterjee

sshd를 다시 시작하려면 다음 명령이 필요했지만 이것은 나를 위해 일했습니다.sudo service sshd reload
pacoverflow

6

아마도 현재 포스터와 관련이 없지만 비슷한 상황에 대한 답변을 검색 할 때이를 찾는 다른 사람들을 도울 수 있습니다. Amazon이 ssh 키 쌍을 생성하도록하는 대신, 자신의 표준 기본 공개 ssh 키를 Amazon에 업로드하고 EC2 인스턴스를 실행할 때이를 지정하는 것이 좋습니다.

이를 통해 ssh에서 "-i"유형 구문을 삭제하고 표준 옵션과 함께 rsync를 사용할 수 있으며 모든 EC2 리전에서 동일한 ssh 키를 사용할 수 있습니다.

이 프로세스에 대한 기사를 여기에 썼습니다.

Amazon EC2에 개인 ssh 키 업로드
http://alestic.com/2010/10/ec2-ssh-keys


+1이 이유 때문에이 질문을 정확히 찾아 보았습니다.
존 리셀 바토

기사를 따르면이 오류가 표시됩니다. regions = $ (ec2-describe-regions | cut -f2) 필수 옵션 '-K, --private-key KEY'누락 (사용시 -h)
KashifAli

@KashifAli EC2 API 명령 줄 도구 자격 증명을 설정하여 항상 모든 명령 줄에서 자격 증명을 전달할 필요는 없습니다.
Eric Hammond

5

이상하게도, 내 문제는 서버가 다시 시작되었고 새로운 DNS 이름이 발행되었다는 것이 밝혀졌습니다. 이전 DNS 이름을 사용하고있었습니다. 나는 이것이 어리석은 소리라는 것을 알고 있지만 이것을 알아내는 데 시간이 걸렸다.


감사합니다! 이것은 정확히 내 문제였습니다. 인스턴스를 다시 시작할 때 DNS 이름이 변경되었음을 몰랐습니다.
Tim Swast

필자의 경우 * .compute.amazonaws.com URL은 탄력적 IP를 할당 할 때 변경되었습니다.
Geoffrey Booth

2

Dropbear를 실행하는 CyanogenMod 전화에 연결하려는 경우 다음 줄을 모두 실행하여 모든 권한이 올바른지 확인해야합니다.

chmod 600 /data/dropbear/.ssh/authorized_keys

또는

chmod 700 /data/dropbear/.ssh/authorized_keys # In case of MacOS X 10.6-10.8

chmod 755 /data/dropbear/ /data/dropbear/.ssh

이것은 나를 위해 고쳤습니다. 그렇지 않으면 아무것도 연결할 수 없습니다.


"다른 로컬 Ubuntu에서 EC2로 SSH에 액세스하려고 할 때"
Grammargeek

1
authorized_keys 가 없으면 어떻게합니까?
IgorGanapolsky

2

당신이에 CentOS 5를 사용하는 경우, 당신은 설정할 수 있습니다 StrictModes no에서 /etc/ssh/sshd_config. NIS / NFS를 사용하여 / home 디렉토리를 공유하고 있으며 모든 권한을 올바르게 설정했지만 항상 비밀번호를 묻는 메시지가 표시됩니다. 설정 후 StrictModes no문제가 사라졌습니다!


1

Greg의 대답은 문제를 더 잘 해결하는 방법을 설명하지만 실제 문제는 트랜잭션 (클라이언트)의 한쪽에 ssh 키가 설정되어 암호 기반 인증 대신 공개 키 인증을 시도한다는 것입니다. EC2 인스턴스에 해당하는 공개 키가 없으므로 작동하지 않습니다.


2
문제를 해결하는 방법은 무엇입니까?
Julien Grenier

1

나는 같은 문제가 있었고 작동하지 않는 수많은 솔루션을 시도한 후 라우터의 방화벽에서 SSH 포트를 열었습니다 (라우터의 방화벽 제어판이 엉망이므로 진행 상황을 말하기가 어렵습니다). 어쨌든, 그것은 그것을 고쳤다 :)

슈퍼 당신이 얻을 오류가 만든 연결이 어떤 종류의 GRR,이 있었다는 것을 암시 거부 권한이이라고 성가신 피 묻은.


1

내가 포함하는 모든 단계를 따르고 있다고하더라도 동일한 문제가 발생했습니다.

$ ec2-authorize default -p 22

그러나 나는 미국 서부 지역에서 인스턴스를 시작했습니다. 따라서 위의 명령도이를 지정해야합니다.

$ ec2-authorize default -p 22 --region us-west-1

이 명령 후에 인스턴스로 ssh 할 수있었습니다. 문제를 깨닫기 전에 약간의 시간을 보냈으며이 게시물이 다른 사람들에게 도움이되기를 바랍니다.


0

드문 경우이지만 selinux가 활성화되어 있고 authorized_keys가있는 디렉토리 (예 : 공유 홈 디렉토리)에 nfs를 사용하는 경우 selinux를 비활성화해야합니다 (보안상의 이유로 권장되지는 않지만 일시적으로 비활성화 할 수 있음). 이것이 문제의 원인인지 확인하거나 selinux가 nfs 홈 디렉토리를 사용하도록 허용하십시오. 나는 세부 사항을 명확하지 않지만 이것은 나를 위해 일했다. setsebool -P use_nfs_home_dirs 1


0

부주의하게 사용자 홈 디렉토리에 그룹 쓰기 권한을 추가 한 후에도 같은 문제가 발생했습니다.

나는 tail -f /var/log/secure기계에서 실행 하고 오류를 보고이 원인을 발견했습니다 Authentication refused: bad ownership or modes for directory /home/<username>.

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