~ / .ssh / authorized_keys에 공개 키를 추가해도 자동으로 로그인되지 않습니다


446

authorized_keys 파일에 공개 SSH 키를 추가했습니다 . ssh localhost비밀번호를 묻지 않고 로그인해야합니다.

나는 그것을하고 입력을 시도 ssh localhost했지만 여전히 암호를 입력하라는 메시지를 표시합니다. 작동하도록 설정해야 할 또 다른 설정이 있습니까?

권한 변경에 대한 지침을 따랐습니다.

내가하면 결과는 다음과 같습니다 ssh -v localhost.

debug1: Reading configuration data /home/john/.ssh/config
debug1: Reading configuration data /etc/ssh/ssh_config
debug1: Applying options for *
debug1: Connecting to localhost [127.0.0.1] port 22.
debug1: Connection established.
debug1: identity file /home/john/.ssh/identity type 1
debug1: identity file /home/john/.ssh/id_rsa type -1
debug1: identity file /home/john/.ssh/id_dsa type -1
debug1: Remote protocol version 2.0, remote software version OpenSSH_4.7p1 Debian-8ubuntu3
debug1: match: OpenSSH_4.7p1 Debian-8ubuntu3 pat OpenSSH*
debug1: Enabling compatibility mode for protocol 2.0
debug1: Local version string SSH-2.0-OpenSSH_4.7p1 Debian-8ubuntu3
debug1: SSH2_MSG_KEXINIT sent
debug1: SSH2_MSG_KEXINIT received
debug1: kex: server->client aes128-cbc hmac-md5 none
debug1: kex: client->server aes128-cbc hmac-md5 none
debug1: SSH2_MSG_KEX_DH_GEX_REQUEST(1024<1024<8192) sent
debug1: expecting SSH2_MSG_KEX_DH_GEX_GROUP
debug1: SSH2_MSG_KEX_DH_GEX_INIT sent
debug1: expecting SSH2_MSG_KEX_DH_GEX_REPLY
debug1: Host 'localhost' is known and matches the RSA host key.
debug1: Found key in /home/john/.ssh/known_hosts:12
debug1: ssh_rsa_verify: signature correct
debug1: SSH2_MSG_NEWKEYS sent
debug1: expecting SSH2_MSG_NEWKEYS
debug1: SSH2_MSG_NEWKEYS received
debug1: SSH2_MSG_SERVICE_REQUEST sent
debug1: SSH2_MSG_SERVICE_ACCEPT received
debug1: Authentications that can continue: publickey,password
debug1: Next authentication method: publickey
debug1: Offering public key: /home/john/.ssh/identity
debug1: Server accepts key: pkalg ssh-rsa blen 149
debug1: PEM_read_PrivateKey failed
debug1: read PEM private key done: type <unknown>

그런 다음 위의 로그 다음에 통과 단계를 요청합니다. 비밀번호없이 로그인하지 않는 이유는 무엇입니까?


5
여기에 해당되지는 않지만 Google에서오고 암호화 된 홈 디렉토리를 사용하는 경우 sshd는 액세스 할 수 없으므로 authorized_keys 파일을 읽을 수 없습니다. 해결책은 다음과 같습니다. bugs.launchpad.net/ubuntu/+source/openssh/+bug/362427/comments/…
Daniel Schaffer

답변:


1097

authorized_keys파일 및 파일이있는 폴더 / 부모 폴더 의 권한을 확인해야합니다 .

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

자세한 내용은 이 페이지를 참조 하십시오 .

그룹 및 다른 사용자의 쓰기 권한을 제거하기 위해 홈 디렉토리의 권한을 변경 / 확인해야 할 수도 있습니다.

chmod go-w ~

6
"chmod -R go-wrx foobar"가 극적인 것은 아니지만 위의 내용이 효과가 있습니까? 재귀가 필요한 이유는 무엇입니까?
joachim

9
두 번째 부분에서는 재귀를 만드는 것이 필요하지 않으며 단지 수행하는 chmod go-wrx foobar것으로 충분합니다. 재귀 적으로 수행하면 파일에 대한 그룹 또는 다른 액세스 권한이있는 경우 특히 웹 디렉토리 인 경우 일부 응용 프로그램에 심각한 영향을 줄 수 있습니다.
StingeyB

24
OpenSSH FAQ에서 언급했듯이 사용자의 홈 및 .ssh 디렉토리는 그룹 / 기타에 대해 제거 된 쓰기 권한 만 있으면됩니다 ( chmod go-w $HOME $HOME/.ssh트릭도 수행됨). 따라서 두 디렉토리 모두에 대해 권한이 755만큼 '열려'있을 수 있습니다. 가장 간단한 / 최소한 침습적 명령은 FAQ에 있습니다 : openssh.org/faq.html#3.14
davidjb

3
내가 할 때까지 왜 작동하지 chmod 700 ~/.ssh && chmod 644 ~/.ssh/authorized_keys않습니까? (644)가 한 곳 (600)는 작동하지 않았다 ...
ficuscr

3
또한 파일을 루트로 sudo chown -R {$USER}:{$USER} ~/.ssh/작성했기 때문에 필요했습니다 authorized_keys.
Zane Hooper

155

SELinux는 또한 authorized_keys가 작동하지 않을 수 있습니다. 특히 CentOS 6 및 7의 루트에 대해서는 비활성화 할 필요가 없습니다. 권한이 올바른지 확인하면 다음과 같이 수정할 수 있습니다.

chmod 700 /root/.ssh
chmod 600 /root/.ssh/authorized_keys
restorecon -R -v /root/.ssh

7
restorecon새 하드 드라이브에 손, 예를 들어으로 파일을 복사 한 후 당신이 필요로하는 것입니다. (이 경우 모든 파일에서 실행해야합니다. 다른 이상한 문제를 해결할 수 있습니다.)
ospalh

또 다른 행복한 야영 자. 이것은 RHEL 6.5에서 제 문제였습니다
Antonio Ortells

2
9/10 번, "왜 작동하지 않는가, 항상 작동하는"문제는 selinux 문제입니다.
Andrew White

1and1 (1und1) 서버에서 문제가 해결되었습니다.
musicman

104

ssh certified_keys 설정 은 간단 해 보이지만 일부 트랩을 숨 깁니다.

-서버-

에서 의 / etc / SSH / sshd_config를 설정할 passwordAuthentication yes수 있도록 동의를 서버 임시 비밀번호 인증

-- 고객 --

cygwin 을 Linux 에뮬레이션으로 간주 하고 openssh를 설치 및 실행하십시오.

1. 개인 및 공개 키 생성 (클라이언트 측) # ssh-keygen

여기서 Enter 키를 누르면 ~ / .ssh /에 DEFAULT 2 파일 " id_rsa "및 " id_rsa.pub "가 표시 되지만 name_for_the_key를 지정 하면 생성 된 파일이 pwd에 저장됩니다

2. 장소 your_key.pub 대상 시스템을ssh-copy-id user_name@host_name

기본 키를 만들지 않은 경우 이것이 잘못되는 첫 번째 단계입니다 ...

ssh-copy-id -i path/to/key_name.pub user_name@host_name

3. 로깅 ssh user_name@host_name은 기본 id_rsa에 대해서만 작동하므로 여기에 필요한 두 번째 트랩이 있습니다.ssh -i path/to/key_name user@host

( ssh -v ... 옵션을 사용 하여 무슨 일이 일어나고 있는지 확인하십시오)

경우 서버가 계속 암호를 묻습니다 당신은 떨어지게했다. 암호입력 하려면 : 키를 만들었을 때 (정상적입니다)

ssh가 청취하지 않는 경우 기본 포트 22를 사용해야합니다. ssh -p port_nr

-서버 -----

4. / etc / ssh / sshd_config 를 수정하십시오.

RSAAuthentication yes
PubkeyAuthentication yes
AuthorizedKeysFile  %h/.ssh/authorized_keys

(사례가 아닌 경우)

이것은 ssh에게 authorized_keys를 승인하고 .ssh / authorized_keys 파일로 작성된 key_name 찌르기를 사용자 홈 디렉토리에서 찾도록 지시합니다.

대상 컴퓨터에서 5 개의 권한 설정

chmod 755 ~/.ssh
chmod 600 ~/.ssh/authorized_keys

패스 인증 끄기

passwordAuthentication no

모든 ssh root / admin /....@ your_domain 시도에 대한 게이트를 닫으려면

6 루트가 아닌 모든 홈 디렉토리의 소유권 및 그룹 소유권이 적절한 지 확인하십시오.

chown -R ~ usernamehere
chgrp -R ~/.ssh/ user 

=================================================

7. 우수 http://www.fail2ban.org를 고려 하십시오

8. 추가 ssh TUNNEL 은 MySQL (바인드 = 127.0.0.1) 서버에 액세스합니다.


5
"단 4 보안"은 보안만을위한 것이 아닙니다. SSH는 파일에 제한적인 권한이 없으면 파일을 무시합니다.
Navin

소유권을 확보하는
것이이

1
나는 전혀 몰랐다 ssh-copy-id! 그 단계만으로도 큰 답을 얻을 수 있습니다.
제임스 마블

1
chmod 755 ~ / .ssh는 700이 아니라 다른 곳에서 볼 수
있다고

36

또한 다른 사람이 홈 디렉토리를 쓸 수 없는지 확인하십시오

chmod g-w,o-w /home/USERNAME

여기서 대답을 훔쳤다


4
하고 chmod 700 ~/.ssh ; chmod 600 ~/.ssh/authorized_keys ; chmod g-w,o-w ~나를 위해 일했다. 감사.
gbraad

1
chmod og-w /home/USERNAME대신 사용 하지 않습니까?
Paramvir Singh Karwal

13

필사자들은 혼란스런 터미널에서 id_rsa.pub 텍스트를 복사하기 때문에 authorized_keys 파일에 추가 줄 바꿈이 없도록 할 수도 있습니다.


2
이것이 바로 나에게 일어난 일입니다! 두 개의 터미널은 너비가 동일하므로 인증 된 키 파일에서 두 줄을보기 위해 줄 번호를 켤 때까지 알아 내기가 어렵습니다.
Shawn

1
이. 이 때문에 한 시간 만 낭비했습니다. 그리고 처음이 아닙니다. @bortunac의 답변은 ssh-copy-id 도구를 언급하며, 이것을 피하기 위해 나중에 사용할 것입니다.
xdhmoore

보이지 않는 줄 바꿈 때문에 치명적 인 대신 을 id_rsa.pub사용 하는 내용을 얻었습니다 . morecat
Dan Halbert

8

사용자는 사용자 이름입니다

mkdir -p /home/user/.ssh
ssh-keygen -t rsa
touch /home/user/.ssh/authorized_keys
touch /home/user/.ssh/known_hosts
chown -R user:user /home/user/.ssh
chmod 700 /home/user/.ssh
chmod 600 /home/user/.ssh/id*
chmod 644 /home/user/.ssh/id*.pub
chmod 644 /home/user/.ssh/authorized_keys
chmod 644 /home/user/.ssh/known_hosts

루트에 대한 더 나은 :mkdir -p /home/$USER/.ssh && chown -R $USER:$USER /home/$USER/.ssh && sudo -u $USER ssh-keygen -t rsa && touch /home/$USER/.ssh/authorized_keys && touch /home/$USER/.ssh/known_hosts && chmod 700 /home/$USER/.ssh && chmod 600 /home/$USER/.ssh/id* && chmod 644 /home/$USER/.ssh/id*.pub && chmod 644 /home/$USER/.ssh/authorized_keys && chmod 644 /home/$USER/.ssh/known_hosts && vim /home/$USER/.ssh/authorized_keys # paste keys here!
오디세우스

7

모든 권한이 정상인 것처럼 보이더라도 SELinux가이 오류를 유발할 수 있습니다. 그것을 비활성화하면 나에게 속임수를 썼다 (비활성화에 대한 일반적인 면책 조항을 삽입하십시오).


에서 SELinux 간섭을 볼 수 있습니다 /var/log/audit/audit.log. restorecon -R -v /root/.ssh내 특정 사건을 수정했습니다.
Dave Goodell

7

.ssh / authorized_keys 에 공개 키를 나열 해야하지만 sshd (서버) 가이를 공개 하기에는 충분하지 않습니다. 개인 키가 암호로 보호되어 있으면 매번 ssh (클라이언트)에게 암호를 제공해야합니다. 또는 ssh-agent를 사용할 수 있습니다 또는 그놈을 .

귀하의 갱신 추적은 암호로 보호 된 개인 키와 일치한다. ssh-agent를 참조하거나를 사용하십시오 ssh-keygen -p.


5

쓰기 명령 :

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

이 작업을 수행 한 후에는 디렉토리가 다음과 같은지 확인하십시오.

drwx------ 2 lab lab 4.0K Mar 13 08:33 .
drwx------ 8 lab lab 4.0K Mar 13 08:07 ..
-rw------- 1 lab lab  436 Mar 13 08:33 authorized_keys
-rw------- 1 lab lab 1.7K Mar 13 07:35 id_rsa
-rw-r--r-- 1 lab lab  413 Mar 13 07:35 id_rsa.pub

1
당신의 대답은 어떻게 받아 들여 지는가? Ctrl + C Ctrl-V 명령을 사용하여 3 년 후 작성 했습니까?
stinger

5

나를 위해 트릭을 한 것은 마침내 소유자 / 그룹 이 루트가 아닌 사용자 인지 확인하는 것이 었습니다 .

chown -R ~/.ssh/ user
chgrp -R ~/.ssh/ user 

chown하지 : 유효하지 않은 사용자를 '/home/lsa/.ssh/'
스테판 Yakovenko 보낸

3

나를 위해 일한 "ssh-add"를 사용해보십시오.


3

기억해야 할 또 다른 팁. v7.0 이후 OpenSSH 는 상속 취약점으로 인해 기본적으로 DSS / DSA ssh 키를 비활성화합니다 . 따라서 OpenSSH v7.0 +를 사용하는 경우 키가 아닌지 확인하십시오 ssh-dss.

당신이 DSA 키 붙어있는 경우 재 활성화하여 업데이트하여 지원을 로컬로 수 sshd_config~/.ssh/config그래서 같은 라인 파일 :PubkeyAcceptedKeyTypes=+ssh-dss


3

내 경우에는 authorized_keys파일 을에 넣어야 했습니다 .openssh.

이 위치는 /etc/ssh/sshd_config옵션 아래에 지정되어 있습니다 AuthorizedKeysFile %h/.ssh/authorized_keys.


서버에서 발생할 수있는 (클라이언트에서 연결을 시도 할 때) 서버에 액세스 할 수없는 디버깅이 불가능한 모든 종류의 문제가 있습니다. 이것은 악의적 인 클라이언트로부터 정보를 숨기려고하지만 의도적으로 어렵게 만듭니다. 디버그.
qneill

2

대상 사용자에게 비밀번호가 설정되어 있는지 확인하십시오. passwd username하나를 설정하려면 실행하십시오 . 비밀번호 SSH 로그인이 비활성화 된 경우에도 필요했습니다.


2

이것은 내 문제를 해결

ssh 에이전트 배쉬

ssh-add


그것이 무엇을하는지 설명하십시오.
lyuboslav kanev

ssh-agent는 ssh 키를 저장합니다. bash 명령은 셸의 새 인스턴스를 시작합니다. ssh-add는 키를 잠금 해제하고로드합니다
Julian

2

주의해야 할 또 다른 문제입니다. 생성 된 파일이 기본이 아닌 경우 id_rsaid_rsa.pub

.ssh / config 파일을 작성하고 연결에 사용할 id 파일을 수동으로 정의해야합니다.

예를 들면 다음과 같습니다.

host remote_host_name
hostname 172.xx.xx.xx
user my_user
IdentityFile /home/my_user/.ssh/my_user_custom.pub

2
IdentityFile은 개인 키 여야합니다
Ken H

@KenH 그래. 오타입니다. 그 죄송합니다.
Kunthar

1

내가 발행 sudo chmod 700 ~/.sshchmod 600 ~/.ssh/authorized_keyschmod go-w $HOME $HOME/.ssh위에서 그리고 내가 삼바 공유가 작업을 진행하는 동안에 대한 권한을 엉망했다는 CentOS7 상자에 내 문제를 해결했습니다. 감사


1

권한 문제처럼 보입니다. 일반적으로 일부 파일 / 디렉토리의 권한이 올바르게 설정되지 않은 경우에 발생합니다. 대부분의 경우 그들은있다 ~/.ssh~/.ssh/*. 제 경우에는입니다 /home/xxx.

sshd의 로그 수준을 수정하여 /etc/ssh/sshd_config(search LogLevel,로 설정 DEBUG) 출력을 확인하여 /var/log/auth.log정확히 무슨 일이 있었는지 확인할 수 있습니다.


3
이것은 허용되는 답변과 실질적으로 동일하게 보이며 아마도 대답이 아닌 그것에 대한 의견이었을 것입니다. 조금 더 많은 담당자와 의견을 게시 할 수 있습니다 . 그때까지는 해결 방법으로 답변을 사용하지 마십시오.
Nathan Tuggy

죄송합니다. 이것이 모든 종류의 질문을 해결할 수있는 방법이라고 생각했습니다. 이제 어떻게해야하는지 알고 있습니다. 감사합니다.
Joey

1

내 문제는 / etc / ssh / authorized_keys를 채우는 자동화가 아직 실행되지 않았을 때 수정 된 AuthorizedKeysFile이었습니다.

$sudo grep AuthorizedKeysFile /etc/ssh/sshd_config
#AuthorizedKeysFile .ssh/authorized_keys
AuthorizedKeysFile  /etc/ssh/authorized_keys/%u

1

서버 에서 /var/log/auth.log 를 살펴보십시오 . 서버가 가능한 공격자에게 너무 많은 정보를 제공하지 않기 때문에 클라이언트 쪽에서 -vv 를 사용하여 추가 정보를 설정해도 도움이되지 않습니다.


1

전체 공개 키를 authorized_keys;에 복사했는지 확인하십시오 . ssh rsa키가 작동 하려면 접두사가 필요합니다.


2
사용 ssh-copy-id
vishnu

1

파일의 속성을 확인해야합니다. 필요한 자산 사용을 할당하려면 :

$ chmod 600 ~/.ssh/sshKey
$ chmod 644 ~/.ssh/sshKey.pub

1

/var/log/auth.log서버 에서 다음 을 찾으십시오.sshd 인증 오류가 발생합니다.

다른 모든 방법이 실패하면 sshd서버를 디버그 모드에서 실행하십시오 .

sudo /usr/sbin/sshd -ddd -p 2200

그런 다음 클라이언트에서 연결하십시오.

ssh user@host -p 2200

내 경우에는 끝에 오류 섹션이 있습니다.

    debug1: userauth_pubkey: test whether pkalg/pkblob are acceptable for RSA SHA256:6bL+waAtghY5BOaY9i+pIX9wHJHvY4r/mOh2YaL9RvQ [preauth]
==> debug2: userauth_pubkey: disabled because of invalid user [preauth]
    debug2: userauth_pubkey: authenticated 0 pkalg ssh-rsa [preauth]
    debug3: userauth_finish: failure partial=0 next methods="publickey,password" [preauth]
    debug3: send packet: type 51 [preauth]
    debug3: receive packet: type 50 [preauth]

이 정보를 사용하여 sshd_config로그인을 ssh그룹 구성원으로 제한하고 있음을 깨달았습니다 . 다음 명령으로이 권한 오류가 수정되었습니다.

sudo usermod -a -G ssh NEW_USER

0

그 메모에서 sshd 설정에-;

PermitRootLogin without-password

위와 같이 설정 한 다음 sshd (/etc/init.d/sshd restart)를 다시 시작하십시오.

로그 아웃 한 후 다시 로그인하십시오!

내가 믿는 기본은-;

PermitRootLogin no

0

필자의 경우 사용자 그룹이 구성 파일 / etc / ssh / sshd_config의 AllowGroups에 설정되어 있지 않기 때문입니다. 그것을 추가하면 모든 것이 잘 작동합니다.


0

비표준 위치에 홈 디렉토리가 있고 sshd로그에 다음 줄이 있습니다.

Could not open authorized keys '/data/home/user1/.ssh/authorized_keys': Permission denied

모든 권한이 괜찮더라도 (다른 답변 참조).

여기에서 해결책을 찾았습니다 : http://arstechnica.com/civis/viewtopic.php?p=25813191&sid=0876f069ec2aa5fdcd691a2e2e7242c2#p25813191

내 특별한 경우 :

  • 에 새로운 줄을 추가했습니다 /etc/selinux/targeted/contexts/files/file_contexts.homedirs:

    • 다음은 일반 홈 디렉토리의 원래 줄입니다.

      /home/[^/]*/\.ssh(/.*)? unconfined_u:object_r:ssh_home_t:s0

    • 이것은 내 새로운 라인입니다.

      /data/home/[^/]*/\.ssh(/.*)? unconfined_u:object_r:ssh_home_t:s0

  • 뒤에 a restorecon -r /data/sshd재시작


0

나는이 문제가 있었고 다른 대답은 해결하지 못했지만 물론 다른 대답 정확합니다.

필자의 경우 /root디렉토리 자체 (예 : 아닌 /root/.ssh)에 잘못된 권한이 있음이 밝혀졌습니다 . 내가 필요:

chown root.root /root
chmod 700 /root

물론 이러한 권한은 (어쩌면 chmod 770) 상관없이 비슷해야합니다 . 그러나, 특별히 방지 sshd에도 작동 /root/.ssh하고 /root/.ssh/authorized_keys모두가 올바른 사용 권한 및 소유자를했다.


0

로그인 사용자 그룹을 다른 사용자에게 추가 할 때이 문제가 발생했습니다. userA라는 ssh-login 사용자와 ssh-login이 아닌 사용자 userB가 있다고 가정합니다. userA에는 userA 그룹도 있습니다. 그룹 userA도 갖도록 userB를 수정했습니다. 설명 된 동작으로 이어 지므로 userA는 프롬프트없이 로그인 할 수 없습니다. userB에서 userA 그룹을 제거한 후 프롬프트없이 로그인이 다시 작동했습니다.

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