SSH 권한 거부 (공개 키)


110

로컬 컴퓨터 (Ubuntu 12.04 LTS를 실행 중)에서 Linode (Ubuntu 12.04 LTS 실행)에 연결하려고합니다.

로컬 컴퓨터에서 개인 및 공개 키를 만들고 공개 키를 Linode의 authorized_keys 파일로 복사했습니다. 그러나 Linode에 ssh하려고하면 오류 메시지가 나타납니다 Permission denied (publickey).

키 인증을 사용하여 Windows 시스템에서 ssh를 ssh 할 수 있기 때문에 Linode에서 ssh를 설정하는 방법에는 문제가 없습니다.

.ssh로컬 Ubuntu 시스템의 내 디렉토리 에는 파일 id_rsaid_rsa.pub파일이 있습니다. 로컬 컴퓨터에서 certified_keys 파일을 만들어야합니까?

편집 : 이것은 내가 실행할 때 얻는 것입니다 ssh -vvv -i id_rsa [youruser]@[yourLinode].

debug3: authmethod_lookup publickey
debug3: remaining preferred: keyboard-interactive,password
debug3: authmethod_is_enabled publickey
debug1: Next authentication method: publickey
debug1: Offering RSA public key: id_rsa
debug3: send_pubkey_test
debug2: we sent a publickey packet, wait for reply
debug1: Authentications that can continue: publickey
debug2: we did not send a packet, disable method
debug1: No more authentication methods to try.
Permission denied (publickey).

4
1) 클라이언트에서이 오류가 발생한 시간에 대해 SSH 서버의 로그에 무엇을 말합니까? ( /var/log/auth.log) 2) 공개 키를 서버로 어떻게 전송 했습니까? 항상 ssh-copy-id권한을 확인하는 데 사용하십시오. 홈 디렉토리, .ssh디렉토리 및 authorized_keys파일에는 엄격한 권한 요구 사항이 있습니다. (의 sshd(8) 맨 페이지 참조 ~/.ssh/authorized_keys). 3) 우분투에서 새로운 키 페어를 생성 했습니까? Windows에서 키를 다시 사용하는 경우 먼저 OpenSSH 형식으로 키를 변환해야합니다.
gertvdijk 2018 년

1
이 명령은 해야 되었습니다 ssh -vvv -i .ssh/id_rsa ....교체하십시오 - - (! id_rsa_gsg_keypair를 할 수있는 경로를 참고) 기존의 로그는 "우리가"전송 할 pubKey이 없다고 보여줍니다.
guntbert

@guntbert 이미 .ssh 디렉토리에 있었기 때문에 .ssh를 놓쳤습니다. 또한 스푸핑 / id_rsa_gsg_keypair를 함께 시도했지만 나는 같은 결과를 얻었다
패틀

알겠습니다. 그래서 잘못 읽었습니다. @gertvdijk의 질문에 대답하십시오.
guntbert

누구나 stackoverflow.com/questions/51254328/unable-to-ssh-to-bitbucket에 대해 의견을 말할 수 있습니까 ?
Mrinmay Kalita

답변:


90

PubKeyAuthentication

클라이언트 설정

  1. 키 생성
    • ssh-keygen
  2. 키를 사용하도록 ssh 구성
    • vim ~/.ssh/config
  3. 키를 서버에 복사
    • ssh-copy-id -i /path/to/key.pub SERVERNAME

2 단계 의 구성 파일 은 다음과 유사해야합니다.

Host SERVERNAME
Hostname ip-or-domain-of-server
User USERNAME
PubKeyAuthentication yes
IdentityFile ./path/to/key

인증 중에 다른 키 파일을 사용 하지 않고 다른 키 파일을 사용 하지 IdentitiesOnly yes않도록 추가 할 수 있습니다. 이로 인해 문제가 발생할 수 있으며 좋은 방법이 아닙니다.sshIdentityFile

문제 해결

  1. "-vvv"옵션 사용
  2. 서버에 PUBLIC 키 (.pub)가 있는지 확인하십시오.
  3. IdentiyFile이 PRIVATE 키를 가리키는 지 확인하십시오.
  4. .ssh 디렉토리에 700이 있고 파일에 700 권한 (rwx ------)이 있는지 확인하십시오.
  5. tail -f /var/log/auth.log (서버에서) 로그인을 시도 할 때 오류를 모니터링
  6. 키 파일이 많은 경우 IdentitiesOnly yes지정된 단일 키를 사용하도록 인증을 제한하십시오.

1
참고로, 나는 github.com/centic9/generate-and-send-ssh-key에 작은 스크립트를 작성 하여 필요한 단계를 한 번에 실행하고 추가로 항상 두통을 유발하는 모든 파일 / 디렉토리 권한을 보장합니다 ...
centic

1
2 단계를 자세히 설명하기 위해 IdentityFile~ / .ssh / config 의 행은 PRIVATE 키를 가리켜 야합니다.
Danny Schoemann


3
4 단계에서 실행 권한을 갖도록 파일을 설정하려는 이유가 궁금합니다.
Todd Walton

또한 사용자 당 매우 중요한 올바른 권한 (chown 및 chmod 사용) 그렇지 않으면 서버에 공개 키가 있어도 인증이 거부됩니다.
joseluisq

61

때때로 문제는 권한과 소유권에서 비롯됩니다. 예를 들어, 루트로 로그인 할 경우 /root, .ssh그리고 authorized_keys루트에 속해야합니다. 그렇지 않으면 sshd에서 읽을 수 없으므로 사용자에게 로그인 권한이 있는지 알 수 없습니다.

홈 디렉토리에서 :

chown -R your_user:your_user .ssh

권리는 700으로 .ssh, 600은authorized_keys

chmod 700 .ssh
chmod 600 .ssh/authorized_keys

1
이 답변이 도움이되었습니다. 이 게시물 에서 조언을 받아 authorized_keys파일을 암호화 된 홈 디렉토리 외부 로 옮겼습니다 . 그렇게하면서 실수로 소유권을 (으)로 변경했습니다 root:root.
Jordan Grant

폴더에 대해 한 번, 파일에 대해 한 번만 두 번 투표 할 수 있기를 바랍니다. 권한이 정확해야합니다.
미스터 그 리버

네, 그것은 모든 권한입니다.
a3y3

이 문제는 내 문제를 해결했습니다. 감사합니다.
sathiyarajan

14

당신은 authorized_keys당신의 클라이언트에 필요하지 않습니다 .

실제로 생성 한 키를 사용하도록 ssh-client에 지시해야합니다. 몇 가지 방법이 있습니다. 테스트 유형 ssh -vvv -i .ssh/id_rsa [youruser]@[yourLinode]입니다. 서버에 연결할 때마다 암호를 제공해야합니다.

그것이 효과가 있으면 ssh-agentwith 키를 추가 할 수 있습니다 ssh-add .ssh/id_rsa(암호를 한 번만 제공해야하며 로그 아웃 / 재부팅하지 않는 한 작동합니다)


도움을 주셔서 감사합니다. 제안한 내용을 입력하면 어떻게되는지 보여주기 위해 답변을 편집했습니다.
Pattle

2
클라이언트에서 키를 전송하려면 ssh-copy-id를 사용하십시오
Panther

@ bodhi.zazen 감사합니다, 그러나 나는 이미 열쇠를 옮겼습니다. 그것은 문제가 아닙니다
Pattle

4
"ssh-client에게 실제로 생성 한 키를 사용하도록 지시해야합니다." 아니요, 기본적으로 기본 경로에서 키를 찾습니다 (예 :) ~/.ssh/id_rsa. 또한 키 에이전트의 사용은 완전히 선택 사항이며 내가 볼 수있는 한 문제와 관련이 없습니다.
gertvdijk 2016 년

@gertvdijk, 당신은 아직 사실에 의해 뒷받침되지 않는 가정을 만들고 있습니다-우리는 시스템에서 무슨 일이 일어 났는지 알 수 없습니다.
guntbert

10

또한의 값을 확인 PasswordAuthentication에서 /etc/ssh/sshd_config하고 있다면 no그것에 변경 yes. 그 후 ssh 서비스를 다시 시작하는 것을 잊지 마십시오.


4
OP가 비밀번호 인증을 사용하지 않습니다. 그들은 의미가 있고 공개 / 개인 키를 사용하고 있습니다.
ctrl-alt-delor

9

내가 가진 문제는 클라이언트에서 잘못된 키를 사용하는 것이 었습니다. id_rsa와 id_rsa.pub의 이름을 다른 것으로 바꿨습니다. 이름을 다시 기본값으로 바꾸거나 ssh 명령을 실행할 때 다음과 같이 사용하십시오

ssh -i ~/.ssh/private_key username@host

1
아니, 공개 키 사용
St3an

@ St3an 당신은 서버에 공개 키를 넣었지만, Todd가 여기에있는 것처럼 연결했을 때 개인 키를 사용합니다
Nathan F.

@NathanFiscaletti는 개인 키를 노출시키지 않아야하므로 개인 키입니다. 개인 키는 로컬 ssh 에이전트가 개인 키에 해당하는 공개 키를 제공하는지 확인하기 위해 사용합니다. 그러면 시스템 간의 SSH 에이전트는 사용자가 다음과 같이 가장하는 사람임을 보증 할 수 있습니다.
St3an

1
바로 그거죠. 그렇기 때문에 ssh-client에 개인 키를 제공해야합니다. 서버는 공개 키를 저장합니다. 위의 게시물의 명령은 개인 키가 사용되는 방식과 정확히 일치합니다.
Nathan F.

7

또한 사용자의 홈 디렉토리 (서버)가 실제로 ssh'ing하는 사용자에게 속해 있는지 확인하십시오 (필자의 경우 root : root로 설정되었습니다).

되어야했다 :

sudo chown username:username /home/username;

원격 서버의 사용자 (예 : def@123.456.789)와 다른 로컬 Linux 상자의 사용자 (예 : abc)와 함께 공개 / 개인 키로 ssh를 사용할 수 있습니다. 로컬 사용자가 로컬 .ssh 파일을 소유하고 있는지 확인해야했습니다 (예 : root : abc가 아닌 abc : abc)`
Michael

이것은 제 경우에
효과적이었습니다

3

최근 웹 서버에서이 문제가 발생했습니다.

일반적으로의 모든 서버에 인증 된 키 목록을 유지합니다 ~/.ssh/authorized_keys2. 내 경험으로 sshd는 기본적으로 찾 ~/.ssh/authorized_keys거나 찾을 것입니다 ~/.ssh/authorized_keys2.

내 웹 서버의 경우, /etc/ssh/sshd_config이 줄을했다

AuthorizedKeysFile    %h/.ssh/authorized_keys

대신에

AuthorizedKeysFile    %h/.ssh/authorized_keys2

후자를 적용하고 ssh 데몬을 다시 시작한 다음 내 pubkey를 사용하여 ssh로 로그인하는 문제를 해결했습니다.


고마워, 이것은이 줄이 구성에서 완전히 주석 처리되었음을 알아내는 데 도움이되었습니다!
Christian.D

2

의 또 다른 원인은의 AllowedUsers구성으로 인한 것일 수 있습니다 /etc/ssh/sshd_conf. 참고 : 열심히 배운대로 목록은 공백으로 구분됩니다 (쉼표로 구분되지 않음).

AllowUsers user1 user2 user3

1

다른 모든 방법이 실패하면 로그인 사용자가 ssh의 AllowedGroup에 속하는지 확인하십시오. 즉, 사용자는 /etc/ssh/sshd_config서버 에서 다음 줄에 표시된 그룹의 구성원입니다 .

AllowGroups ssh #Here only users of 'ssh' group can login

1

내 경우, 클라이언트는 우분투 14.04lts이며 서버는 cygwin을 실행하는 2012 서버에서 승리했습니다. cygwin의 2012 서버 디렉토리가 / home / Administrator 일 때 'ssh administrator @ xxxx'를 사용하고있었습니다. 따라서 'ssh Administrator @ xxxx'(관리자의 대문자 A 참고)를 시도했을 때 대소 문자를 구분하여 잘 작동했습니다.

'user not found'와 같은 오류 메시지는 'Permission denied (publickey, keyboard-interactive)'보다 훨씬 빠른 해결책으로 이끌었습니다.


누군가 그것을 제안하는 ssh 프로젝트에 문제를 기록해야합니다. 비슷한 문제가 발생했습니다.
벤 Creasy

1

cPanel Centos 시스템에서 AWS의 Ubuntu 서버로 일반 사용자 (예 : johndoe) 퍼블릭 키를 복사 할 때도 같은 문제가있었습니다. 위의 gertvdijk제안한 대로, 나는 그것을 확인 /var/log/auth.log하고 충분히 말했다 Authentication refused: bad ownership or modes for directory /home/johndoe. apache2의 기본 가상 호스트 문서 루트 /home/johndoe로 설정하려고 할 때 잘못 777 /home/johndoe/public_html's로 나타났습니다 (해당 작업에도 필요하지 않음).

여기여기에 대한 답변도 참조 하십시오

서버에는 공개 키만 있으면되며 .ssh/authorized_keys클라이언트 (작업중인 컴퓨터)에는 개인 키 (.pem 또는 Filezilla와 함께 SFTP를 사용하는 경우 .ppk)가 있어야합니다.


1

이 스레드에 온 나와 같은 퍼티 사용자의 경우 user @ Ip 사용자를 추가하지 않은 경우에도이 오류가 발생할 수 있습니다!

키 파일 chmod에 대한 권한이있는 다른 사용자 600)

ssh 1.1.1.1 -i /path/to/.pem file 
Permission denied (publickey).`

ssh user@1.1.1.1 -i /path/to/.pem file 

1

이것은 나를 위해 일한 것입니다. 수정은 내 것이 아니지만 다른 사람이 같은 문제가있는 경우 여기에 적어 둡니다.

최초의 저자가 여기에 게시했습니다 : digital-ocean-public-access-key-denied

sudo nano /etc/ssh/sshd_config

이것을 교체하십시오

UsePAM yes
IgnoreUserKnownHosts no
PasswordAuthentication no

이것으로

UsePAM no
IgnoreUserKnownHosts no
PasswordAuthentication yes

파일을 저장하고 ssh를 다시 시작하십시오.

reload ssh

ssh는 이제 암호를 요구하면서 작동합니다


1

질문에 설명 된 것과 같은 문제가있었습니다. ssh -vvv -i id_rsa [youruser]@[yourLinode]클라이언트 컴퓨터 에서 실행 한 결과 는 질문에서 설명한 것과 비슷합니다. 다른 답변에서 조언 한대로 모든 파일 및 디렉토리 권한을 확인했으며 정확했습니다.

그것은 생성 된 파일을 복사 할 때 밝혀졌다 id_rsa.pub파일로, 서버 시스템에를 ~username/.ssh/authorized_keys, 실수로 단어를 생략 거라고 ssh-rsa처음부터합니다. 그것을 추가하면 문제가 해결되었습니다.


1

우분투 16.04에서도 작동합니다.

문제는 sshd_config파일 내에 있습니다

ULTIMATE 솔루션은 다음과 같습니다.

우분투 서버에 루트로 로그인

vi /etc/ssh/sshd_config

이제 맨 아래로 이동하여 값을 "no"에서 "yes"로 변경하십시오.

다음과 같아야합니다.

터널링 된 일반 텍스트 암호를 비활성화하려면 no로 변경

PasswordAuthentication yes
service sshd reload

적용합니다.

이제 LOCAL 시스템 (일명 랩톱 등)에서 다음 명령을 사용하여 간단히 키를 사용할 수 있습니다

새 터미널 창을 열고 서버에 로그인하지 말고 다음 명령을 입력하십시오.

ssh-copy-id john @ serverIP 주소

john을 사용자 이름으로 바꾸십시오.

당신은 가야한다


1

궁금한 사람들은 ssh 액세스 권한을 루트 계정에서만 키로 설정 한 다음 새로운 사용자를 만들었을 것입니다.

ssh root@your-ip-address

rsync --archive --chown=[user]:[user] ~/.ssh /home/[user]

logout

그런 다음 다시 시도하십시오. [user]를 새 사용자 계정으로 바꾸십시오.

설정에서 ssh 키를 사용한 경우 DigitalOcean에서 새 서버를 설정할 때 일반적입니다.

https://www.digitalocean.com/community/tutorials/initial-server-setup-with-ubuntu-18-04


0

내 경우에는 .ssh오래된 컴퓨터에서 디렉토리를 복사하여 문제가 발생했습니다 . 이전 SSH 구성에서 더 이상 사용되지 않는 DSA 키를 사용하고 있음이 밝혀졌습니다 . 이번에는 RSA 기반의 새로운 키 쌍으로 전환하면 문제가 해결되었습니다.


0

machineA 및 machineB에 독립적으로 액세스 할 수있는 경우 (예 : machineC에서) 다음 방법이 작동 할 수 있습니다.

ssh-copy-id가 작동하지 않으면 비밀번호 인증이 비활성화 될 수 있습니다. 다음은 해결 방법 입니다.

machineB의 승인 된 키 (예 : ~ / .ssh / authorized_keys)에 machineA의 공개 키가 있으면 machineA에서 ssh 할 수 있습니다. 이것은 scp에도 적용됩니다.

다음을 사용하여 키 페어를 생성 한 후 : ssh-keygen

machineA , 실행cat ~/.ssh/id_rsa.pub

샘플 출력 :

ssh-rsa AAAAB3NzaSGMFZW7yB anask@mahineA

인쇄 된 키 ( ⌘ Command+ C또는 CRTL+ C)를 복사 한 다음 machineB 의 ~ / .ssh / authorized_keys 파일에 추가하십시오 .

예를 들어 machineB 에서 다음을 실행하십시오 .

echo 'ssh-rsa AAAAB3NzaSGMFZW7yB anask@mahineA' >> ~/.ssh/authorized_keys

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