SSH가 계속 내 펍키를 건너 뛰고 비밀번호를 묻습니다.


52

원격 서버에 접속할 때마다 비밀번호를 제공해야합니다. 공개 키 (id_dsa.pub)를 다음을 사용하여 원격 서버에 복사했습니다.

ssh-copy-id -i id_dsa.pub user@server

authorized_keys에 올바르게 추가되었는지 확인했습니다. 모든 파일 / 디렉토리 권한이 올바른지 :

~user 755
~user/.ssh 700
~user/.ssh/authorized_keys 640
~user/.ssh/id_dsa.pub 644

/ etc / ssh / sshd_config의 PasswordAuthentication 필드는 yes로 설정되어 있습니다. sshd를 디버그 모드로 설정하고 상세 스위치를 ssh 명령에 추가했습니다. 서버가 회선 때문에 id_pub.dsa를 사용하지 않았다는 인상을 받았습니다.

Skipping ssh-dss key: ........... not in PubkeyAcceptedKeyTypes

서버 측에 암호화 된 디스크가 없습니다. 어떻게 진행할 아이디어가 있습니까? 다음은 ssh 데몬 디버그 정보입니다.

sudo /usr/sbin/sshd -d
====
debug1: sshd version OpenSSH_6.6.1, OpenSSL 1.0.1f 6 Jan 2014
debug1: key_parse_private2: missing begin marker
debug1: read PEM private key done: type RSA
debug1: private host key: #0 type 1 RSA
debug1: key_parse_private2: missing begin marker
debug1: read PEM private key done: type DSA
debug1: private host key: #1 type 2 DSA
debug1: key_parse_private2: missing begin marker
debug1: read PEM private key done: type ECDSA
debug1: private host key: #2 type 3 ECDSA
debug1: rexec_argv[0]='/usr/sbin/sshd'
debug1: rexec_argv[1]='-d'
Set /proc/self/oom_score_adj from 0 to -1000
debug1: Bind to port 22 on 0.0.0.0.
Server listening on 0.0.0.0 port 22.
debug1: Bind to port 22 on ::.
Server listening on :: port 22.
debug1: Server will not fork when running in debugging mode.
debug1: rexec start in 5 out 5 newsock 5 pipe -1 sock 8
debug1: inetd sockets after dupping: 3, 3
Connection from xxx port 63521 on yyy port 22
debug1: Client protocol version 2.0; client software version OpenSSH_7.1
debug1: match: OpenSSH_7.1 pat OpenSSH* compat 0x04000000
debug1: Enabling compatibility mode for protocol 2.0
debug1: Local version string SSH-2.0-OpenSSH_6.6.1p1 Ubuntu-2ubuntu2.3
debug1: permanently_set_uid: 115/65534 [preauth]
debug1: list_hostkey_types: ssh-rsa,ssh-dss,ecdsa-sha2-nistp256 [preauth]
debug1: SSH2_MSG_KEXINIT sent [preauth]
debug1: SSH2_MSG_KEXINIT received [preauth]
debug1: kex: client->server chacha20-poly1305@openssh.com <implicit> none [preauth]
debug1: kex: server->client chacha20-poly1305@openssh.com <implicit> none [preauth]
debug1: expecting SSH2_MSG_KEX_ECDH_INIT [preauth]
debug1: SSH2_MSG_NEWKEYS sent [preauth]
debug1: expecting SSH2_MSG_NEWKEYS [preauth]
debug1: SSH2_MSG_NEWKEYS received [preauth]
debug1: KEX done [preauth]
debug1: userauth-request for user damian service ssh-connection method none [preauth]
debug1: attempt 0 failures 0 [preauth]
debug1: PAM: initializing for "damian"
debug1: PAM: setting PAM_RHOST to "freebox-server.local"
debug1: PAM: setting PAM_TTY to "ssh"
Connection closed by xxxx [preauth]
debug1: do_cleanup [preauth]
debug1: monitor_read_log: child log fd closed
debug1: do_cleanup

다음은 ssh verbose 출력입니다.

$ ssh -v user@server
OpenSSH_7.1p1, OpenSSL 1.0.2d 9 Jul 2015
debug1: Connecting to server [xxxx] port 22.
debug1: Connection established.
debug1: key_load_public: No such file or directory
debug1: identity file /home/user/.ssh/id_rsa type -1
debug1: key_load_public: No such file or directory
debug1: identity file /home/user/.ssh/id_rsa-cert type -1
debug1: identity file /home/user/.ssh/id_dsa type 2
debug1: key_load_public: No such file or directory
debug1: identity file /home/user/.ssh/id_dsa-cert type -1
debug1: key_load_public: No such file or directory
debug1: identity file /home/user/.ssh/id_ecdsa type -1
debug1: key_load_public: No such file or directory
debug1: identity file /home/user/.ssh/id_ecdsa-cert type -1
debug1: key_load_public: No such file or directory
debug1: identity file /home/user/.ssh/id_ed25519 type -1
debug1: key_load_public: No such file or directory
debug1: identity file /home/user/.ssh/id_ed25519-cert type -1
debug1: Enabling compatibility mode for protocol 2.0
debug1: Local version string SSH-2.0-OpenSSH_7.1
debug1: Remote protocol version 2.0, remote software version OpenSSH_6.6.1p1 Ubuntu-2ubuntu2.3
debug1: match: OpenSSH_6.6.1p1 Ubuntu-2ubuntu2.3 pat OpenSSH_6.6.1* compat 0x04000000
debug1: Authenticating to server:22 as 'user'
debug1: SSH2_MSG_KEXINIT sent
debug1: SSH2_MSG_KEXINIT received
debug1: kex: server->client chacha20-poly1305@openssh.com <implicit> none
debug1: kex: client->server chacha20-poly1305@openssh.com <implicit> none
debug1: expecting SSH2_MSG_KEX_ECDH_REPLY
debug1: Server host key: ecdsa-sha2-nistp256 SHA256:v4BNHM0Q33Uh6U4VHenA9iJ0wEyi8h0rFVetbcXBKqA
debug1: Host 'server' is known and matches the ECDSA host key.
debug1: Found key in /home/user/.ssh/known_hosts:2
debug1: SSH2_MSG_NEWKEYS sent
debug1: expecting SSH2_MSG_NEWKEYS
debug1: SSH2_MSG_NEWKEYS received
debug1: Roaming not allowed by server
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: Trying private key: /home/user/.ssh/id_rsa
debug1: Skipping ssh-dss key /home/user/.ssh/id_dsa for not in PubkeyAcceptedKeyTypes
debug1: Trying private key: /home/user/.ssh/id_ecdsa
debug1: Trying private key: /home/user/.ssh/id_ed25519
debug1: Next authentication method: password
user@server's password:

1
동일한 문제 (및 본질적으로 동일한 솔루션)에 대해서는 superuser.com/q/1016989/93541 도 참조하십시오 .
DW

대상의 sshd_config에 PubkeyAuthentication no 가 있으면 항상 암호를 묻는 메시지가 표시됩니다. yes로 설정 하고 대상 호스트에서 sshd를 다시 시작하여 pubkey 인증을 활성화하십시오.
C. Kelly

답변:


84

새로운 openssh 버전 (7.0+)은 이상 사용되지 않는 DSA 키 이며 기본적으로 서버 또는 클라이언트가 아닌 DSA 키를 사용하지 않습니다. 더 이상 키를 사용하는 것이 바람직하지 않으므로 가능하면 RSA 키사용하는 것이 좋습니다 .

실제로 DSA 키를 사용해야하는 경우 클라이언트 구성에서 DSA 키를 명시 적으로 허용해야합니다.

PubkeyAcceptedKeyTypes +ssh-dss

~/.ssh/config자세한 메시지가 알려 주려고 그 줄을 입력하기에 충분해야 합니다.


5
+1,하지만 더 나은 조언을 다른를 사용하는 것, 비 사용되지 않는, 키 유형 ...
jasonwryan

@jasonwryan 의견을 보내 주셔서 감사합니다. 확실히. 답변을 업데이트하겠습니다.
Jakuje

감사합니다 Jakuje! 그 말은, dsa가 구식이라는 것을 몰랐습니다. 새로운 키 페어를 생성했습니다 ssh-keygen. rsa가 기본값입니다. 내일 다른 컴퓨터에서 로그인을 시도합니다.
Damo

당신이 ~/.ssh/config존재하지 않는다면 그냥 만드십시오. 그리고 공동 권한을 설정해야합니다 chmod 600 ~/.ssh/config.
Florian Brucker 8

@knb는 그렇게하지 않습니다. 타원 곡선 알고리즘을 모두 제거 했으므로 나중에 다른 알고리즘을 사용하지 않아도됩니다.
Jakuje

2

제 경우에는 다른 사용자가 AuthorizedKeysFile위치를 변경했기 때문에이 문제가 발생했습니다 . authorized_keys이 위치에 다른 사용자 가 없기 때문에 authorized_keys기본 홈 디렉토리에 올바른 권한이 있어도 로그인은 기본적으로 비밀번호로 설정됩니다 .

AuthorizedKeysFile   /etc/ssh/%u/authorized_keys

이 수정 된 라인 출력을 주석 처리하고 sshd 서비스를 다시 시작하여 기본 설정으로 돌아가서 다른 사용자가 자신의 키를 사용하여 인증 할 수있었습니다.


SELinux 컨텍스트가 사용자의 homedir에서 제대로 초기화되지 않은 RHEL7 시스템에서 비슷한 문제를 해결했기 때문에 표준 권한에도 불구하고 ssh가 인증 된 키 파일을 읽을 수 없었습니다. 궁극적으로 restorecon -Rv /home동일한 시스템에서 잘못 설정된 다른 사용자를 위해 문제를 해결하기 위해 실행 되었습니다.
dannysauer

1

나는 Jakuje 's Answer No luck을 시도했다. 그러나 나는 거기에서 문제를 이해합니다. 의견을 추가하려고했지만 답변을 추가해야한다는 평판이 필요합니다.

그러나 나를위한 구성 파일 / etc / ssh / ssh_config

  1. sudo nano /etc/ssh/ssh_config
  2. PubkeyAcceptedKeyTypes +ssh-dss 하단에이 줄을 추가했습니다.
  3. 저장하고 다시 시도하십시오.

일했다!


1

라즈베리 파이SSH 하기 위해 내가 한 일을 요약하면 됩니다.

서버 머신 (라즈베리 파이)에서 :

$ ip addr show 

또는 간단히 말해 ip aPi 시스템의 IP 주소 (host_ip)가 표시됩니다.

$ mkdir .ssh

클라이언트 머신 (우분투)에서 :

$ ssh-keygen -t rsa  

위의 @Jakuje에 대한 크레딧. 처음에는 키 생성에 ssh-keygen -t dsa를 사용하고 있었고 ssh는 계속 암호를 묻습니다. @Jakuje의 답변을 볼 때까지 ssh -v ip-address는 나에게 유용한 정보를 제공하지 않습니다.

$ cat .ssh/id_rsa.pub | ssh user_id@host_ip 'cat >> ~/.ssh/authorized_keys'  

프롬프트가 표시되면 Pi 시스템의 비밀번호를 제공하는 user_id 및 host_ip를 대체하십시오.

$ ssh user@ip_address

더 이상 암호없이 PI에 성공적으로 로그인


0

dsa 는 나를 위해 일하지 않았다. RSA 는했다.

ssh-keygen -t rsa -P '' -f ~/.ssh/id_rsa
cat /Users/user_name/.ssh/id_dsa.pub >> ~/.ssh/authorized_keys

그리고 암호없이 ssh를 할 수 있습니다.

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