키 파일을 사용하여 SSH 인증 시도 : 서버가 키를 거부했습니다.


53

사용자 이름 / 암호 대신 키 파일을 사용하여 SSH 인증을 설정하려고합니다. 클라이언트는 PuTTY를 실행하는 Windows 박스이고 서버는 Ubuntu 12.04 LTS 서버입니다.

puttygen.exe를 다운로드하여 키 페어를 생성했습니다. 에서 /etc/ssh/sshd_config나는이 라인을 가지고 :

AuthorizedKeysFile %h/.ssh/authorized_keys

내 고객의 공개 키 파일에 다음과 같이 표시됩니다.

---- BEGIN SSH2 PUBLIC KEY ----
Comment: "my@email.address.com"
ssh-rsa AAAAB3NzaC1yc2EAAAABJQAAAIEAr3Qo6T5XU06ZigGOd3eKvfBhFLhg5kWv8lz6
qJ2G9XCbexlPQGanPhh+vcPkhor6+7OmB+WSdHeNO652kTofnauTKcTCbHjsT7cJ
GNrO8WVURRh4fabknUHPmauerWQZ6TgRPGaz0aucU+2C+DUo2SKVFDir1vb+4u83
AV1pKxs=my@email.address.com
---- END SSH2 PUBLIC KEY ----

"ssh-rsa AAA"에서 "my@email.address.com"으로 부품을 복사하여 ~/.ssh/authorized_keys서버 (내 홈 폴더) 의 파일 에 넣었습니다 . 연결> SSH> 인증 아래 PuTTY에서 클라이언트에서 생성 한 개인 키의 경로를 입력하고 세션 설정을 저장했습니다.

나는 ssh 서버를 다시 시작했다.

sudo service ssh restart

이제 PuTTY에서 프로파일을로드하고 (개인 키가 여전히 연결> SSH> 인증에 있고 경로가 올바른지 확인) 프로파일을 실행하면 프로파일이 나타납니다.

Server refused our key

나는 아래 파일에 공개 키를 퍼팅 시도 디렉토리 ./ssh/authorized_keys/ 그래서 내가 사용하지만 도움이되지 않았다 ./ssh/authorized_keysA와 파일 거기에 키를 붙여 넣기. 또한 서버에서 개인 / 공개 키 쌍을 생성하여 공개 키를 넣고 ./ssh/authorized_files클라이언트의 PuTTY에 개인 키를 로드하려고했습니다. 서버를 재부팅해도 도움이되지 않았습니다.

키를 사용자의 홈 폴더 외부에 배치하면 오류가 해결 될 수 있지만 홈 폴더가 암호화 된 경우에만 유용합니다.이 폴더는 그렇지 않습니다.

또한 1024 비트가 너무 짧을 것이라고 생각하여 4096 비트 키를 생성하려고 시도했습니다.

이 기능을 작동 시키려면 어떻게해야합니까? 감사!

편집하다:

좋아, /var/log/auth.log말했다 :

sshd: Authentication refused: bad ownership or modes for directory /home/vorkbaard/.ssh

구글은 ~/.ssh/700 ~/.ssh/authorized_keys이어야 하고 600이어야한다고 말합니다. 그래서 그렇게했습니다. 이제 /var/log/auth.log말한다 :

sshd: error: key_read: uudecode AAAAB3N [etc etc etc until about 3/4 of my public key]

답변:


95

좋아, 고정되어 있지만 이것이 이미 시도한 것과 어떻게 다른지 알 수 없습니다.

제가 한:

  • puttygen.exe로 키 페어 생성 (길이 : 1024 비트)
  • PuTTY 프로필에 개인 키를로드
  • ~/.ssh/authorized_keys 한 줄 에 공개 키를 입력하십시오 (로 시작해야 함 ssh-rsa)
  • chmod 700 ~/.ssh
  • chmod 600 ~/.ssh/authorized_keys
  • chown $USER:$USER ~/.ssh -R
  • /etc/ssh/sshd_config포함되도록 변경AuthorizedKeysFile %h/.ssh/authorized_keys
  • sudo service ssh restart

문제 해결을 위해 # tail -f /var/log/auth.log.

당신의 도움을 주셔서 감사합니다!


1
흠, 그래서 그 sshd: error: key_read: uudecode AAAAB3N오류는 auth.log어떻게 되었습니까?
Alaa Ali

나는 단서가 없다, Alaa. 아마도 이전 키 문자열을 붙여 넣는 동안 오류가 발생했을 수 있습니다. Auth.log는 더 이상 항목을 얻지 못하며 키 기반 인증은 완벽하게 작동합니다. 내 주요 문제는 내가 정말 확실하지 않았다이었다 무엇 을, 수행하는 데 필요한 방법 이 훨씬 더 어렵습니다. 그래서 왜 그런지 모르겠지만 작동합니다. 당신의 도움에 다시 한번 감사드립니다 :)
Forkbeard

대박!!! 나는 이틀 동안 머리를 긁었다. 이 답변은 하루를 저장합니다!
naka

3 단계는 나를위한 속임수였습니다. 공개 키를 authorized_keys파일 에 넣지 않았습니다. 방금 mykey.pub파일을 ~/.ssh폴더에 붙여 넣은 후 파일을 가져올 것이라고 생각했습니다. 대신 내가 궁극적으로 필요한 것은 이것을 실행하거나 거기에있을 수있는 다른 키 아래에 편집하여 붙여 넣는 것이 었습니다. cat mykey.pub >> authorized_keys. 지금은 간단 해 보이지만 모든 공개 키는 디렉토리 authorized_keys뿐만 아니라 살아야한다는 교훈이 ~/.ssh/있습니다. 이것이 올바른 주장이 아닌 경우 조언하십시오.
timbrown

단계가 도움이되지 않으면 다음 사항도 확인하십시오. 1. 저장된 PuTTY 공개 키를 OpenSSH가 아닌 authorized_keys에 복사했습니다. 2. PuTTYgen에서 복사 / 붙여 넣기를 사용하여 복사 한 경우 (필수) 여러 줄의 공개 키; 한 줄이어야합니다. 당신은 r_hartman 감사는 복사하는 동안 선행 또는 후행 공백이 있는지 추가하지 않은 만든다 centos.org/forums/viewtopic.php?t=990
mvladk

23

방금이 문제가 발생했습니다. 이 스레드에서 이미 언급 한대로 구성을 올바르게 설정했지만 (authorized_keys에 대한 권한 등) 공개 키가 잘못된 형식으로되어 있습니다. 그것은 다음과 같은 형태였습니다 :

---- BEGIN SSH2 PUBLIC KEY ----
Comment: "imported-openssh-key"
AAAAB3NzaC1yc2EAAAADAQABAAABAQDUoj0N3vuLpeviGvZTasGQ...
... lPmTrOfVTxI9wjax2JvKcyE0fiNMzXO7qiHJsQM9G9ZB4Lkf71kT
---- END SSH2 PUBLIC KEY ----

작동하지 않았습니다. 그러나 다음과 같은 형식으로 작동하게했습니다.

ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDU.....j0N3vuLpeviGvZTasGQa1rcJiPXQMW7v3uurb+n94B9MQaaWR0odsg5DJQL92TNenOda5BO1nd08y6+sdLQmHXExTz6X8FzgoVsAkEl3RscxcxHUksiKA9JfTo38vQvG/bPxIHMCuSumCQVA1laf3rO/uOrkcB7iMWhaoi1/z6AbFtPzeh7xjGfInMWwtBI0CsHSRF73VWIxT26w0P+KjafCjSn/7vDO1bT8QHujSQelU/GqaVEvbbvPl1a7POVjKgHLNekolwRKfNeVEewcnmZaoqfHgOKlPmTrOfVTxI9wjax2JvKcyE0fiNMzXO7qiHJsQM9G9ZB4Lkf71kT UserName@HOSTNAME

14
ssh-keygen -i -f filenameofwindowsformpub.key공개 키를 OpenSSH 서버가 이해하는 형식으로 변환하는 데 사용할 수 있습니다 .
Black

예, 그것은 나를 위해 일했습니다! 한 줄에 있어야합니다. 그것만 믿을 수 없어!
adelriosantiago

1
안녕 kuraara 나는 @Black의 위의 지시를 대답에서 두드러지게 만들어야한다고 생각합니다.
ekerner

OpenSSH 서버 형식에 주석을 추가 할 수 있습니까? 인간에게는이 키가 어떤 컴퓨터를 나타내는 지 말하기 어렵습니다.
user1700890

@Black의 제안을 따르면 문자열 끝에 UserName @ HOSTNAME이 없습니다. 그 부분이 중요한지 모르겠습니다.
arnoldbird

9

문제는 Windows 가 Linux와 다른 새 줄을 사용한다는 것입니다. 따라서 Windows에서 Linux로 키를 복사 할 때 편집기의 Linux에서 볼 수없는 줄 끝에 \ n 이 있습니다.

/var/log/auth.log를 종료하고 로그인을 시도하면 오류는 다음과 같습니다.

sshd : 오류 : key_read : uudecode AAAAB3N [....] == \ n

Windows에서 키를 변경하여 마지막에 줄이없는 한 줄로 키를 변경 한 다음 Linux로 복사하면 작동합니다 (트릭이 필요합니다).


이것은 내 문제 였지만 auth.log에 이것이 사실이라는 것을 알지 못했습니다. 좌절 ...
앤서니

8

홈 디렉토리에 대한 권한을 변경해야했습니다

chmod 700 ~

2
이것은 저에게도 효과적이었습니다 (AIX에서도).
stevepastelan

CentOS에서도 저를 위해 일했습니다
Jaywalker

Redhat에서 나를 위해 일했습니다! 그룹 쓰기 액세스가 특정 문제인 것 같습니다. 그래도 그룹 읽기 권한을 "chmod 740 ~"로 남겨두면 여전히 작동합니다.

6

~ / .ssh 디렉토리 권한을 770에서 700으로 변경하고 ~ / .ssh / authorized_keys 파일 권한을 660에서 600으로 변경해야했습니다.

어떤 이유로 그룹 권한을 제거하면이 문제가 해결되었습니다.

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

5

~/.ssh/authorized_keys파일은 모두 한 줄에를로 키가 필요합니다. 위의 붙여 넣기와 같이 여러 줄에 추가 한 경우 줄을 결합하십시오.


고마워, 그건 말이되고 이제 디렉토리가 아닌 파일 인 이유를 이해합니다. 그러나 도움이되지 않았습니다.
Forkbeard 2016 년

3
이것으로 혼란 스러울 수있는 사람이라면 누구나 각 키 자체가 한 줄에 있어야하지만 다른 키는 다른 줄에 있어야한다는 것을 의미합니다.
Anthony

2

나를 위해 일한 것은 다음과 같습니다.

에서 puttygen키를 생성 한 후 상단 필드의 정보를 복사하여 붙여 넣어 authorized_keys 파일로 이동해야합니다. 공개 키를 클라이언트 컴퓨터에 저장 한 다음 열면 텍스트가 puttygen화면 상단의 텍스트와 다릅니다 . 다시 한 번, puttygen키를 생성 한 후 화면 의 상단 에서 텍스트를 복사하여 에 위치한 Authorized_keys 파일에 붙여 넣어야합니다 ~/.ssh.


이것은 실제로 문제를 해결했습니다. 공개 키 저장을 클릭하면 왜 올바른 형식을 저장하지 않는지 알 수 없습니다.
luky

1

위의 모든 답변 외에도 키를 puttygen올바르게 복사하여 붙여 넣으십시오 !

대부분의 키 문자열을 두 번 클릭하여 선택하면 텍스트 상자가와 같은 일부 문자에서 줄을 분할 +하여 문자 다음에 텍스트를 선택하지 않기 때문에 전체 문자열을 얻지 못할 수 있습니다 +( 텍스트 상자가 너무 작아서 볼 수 없습니다). ssh-rsa텍스트 상자의 끝에서 끝까지 전체 문자열을 수동으로 선택하십시오 .


1

때로는 한 줄에 공개 키를 갖는 것과 관련된 문제 일 수 있습니다.이 방법은 문제를 해결하는 것으로 보입니다.

echo 'the content of the public key' > /root/.ssh/authorized_keys

1

나를 위해 문제는 ~/.ssh/authorized_keys루트를 소유 한 루트를 사용하여 만들었습니다 . 나는 chown sshuser:sshuser ~/.ssh/authorized_keys그때 일을 시작했다


1

나도이 오류에 직면하여 authorized_keys 파일의 권한을로 변경하여 해결했습니다 600.

chmod 600 ~/.ssh/authorized_keys

1

일반적인 오류는 사람들이 Vim과 같은 텍스트 편집기를 사용하고 "삽입"을 활성화하기 전에 복사 한 텍스트를 붙여 넣는 것입니다 (붙여 넣기 전에 Vim에서 + i를 누름)


0

사실, authorized_keys의 권한을 (으 644)로 변경 한 다음 문제가 해결되었습니다.

chmod 644 ~/.ssh/authorized_keys

0

열린 ssh를 디버그하려면 다음을 사용할 수 있습니다.

sudo `which sshd` -p 2020 -Dd

다른 포트 2020에서 sshd를 실행합니다. sshd를 현재 프로그램으로 실행하여 출력이 화면으로 이동합니다. 닫히면 닫힙니다.

연결을 시도하십시오.

설명:

  • `which sshd`-sshd 주소를 찾고 어떤 sshd가 인쇄하는지 확인하십시오. 역 따옴표를 사용하면 실행되고 결과가 제자리에 반환됩니다.
  • -p 2020-포트를 지정합니다
  • -D-파일에 기록
  • -d-화면에 로그인

https://www.attachmate.com/documentation/rsit-unix-802/rsit-unix-guide/data/sshd_options_ap.htm


이 답변을 확장 할 수 있습니까? 논쟁은 무엇을 수반합니까? (경험이없는 사람을 위해) 명령은 무엇입니까?
Zzzach ...

-1

루트로 로그인 한 상태에서 .ssh 및 certified_keys 파일을 작성하여 잘못된 권한을 부여했습니다. 또한 모든 파일을 루트 디렉토리 아래에 두었습니다.

원하는 사용자에게 해당 파일의 소유권을 변경하는 것은 좋은 습관이 아니므로 단계를 다시 추적하여 SSH를 사용하고 .ssh 및 certified_keys를 사용하려는 사용자로 로그인했는지 확인했습니다.

Winub를 Xubuntu 15.04 서버에 연결 하는 방법 : VPS에 연결하기 위해 Putty를 사용하여 SSH 키를 만드는 방법

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