SSH tiếp tục bỏ qua pubkey của tôi và yêu cầu mật khẩu


52

Mỗi lần tôi ssh vào máy chủ từ xa, tôi cần cung cấp mật khẩu. Tôi đã sao chép khóa công khai của mình (id_dsa.pub) sang máy chủ từ xa bằng cách sử dụng:

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

Tôi đã kiểm tra nó đã được thêm chính xác vào ủy quyền. Tất cả các quyền của tập tin / thư mục là chính xác:

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

Trường Mật khẩu xác thực trong / etc / ssh / sshd_config được đặt thành có. Tôi đặt sshd trong chế độ gỡ lỗi và thêm công tắc dài dòng vào lệnh ssh. Tôi có ấn tượng rằng máy chủ đã không cố sử dụng id_pub.dsa vì dòng

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

Không có đĩa mã hóa ở phía máy chủ. Bất kỳ ý tưởng làm thế nào để tiến bộ? Dưới đây là thông tin gỡ lỗi ssh daemon:

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

Đây là đầu ra sbo 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
Xem thêm superuser.com/q/1016989/93541 cho cùng một vấn đề (và về cơ bản là cùng một giải pháp).
DW

Lưu ý rằng nếu sshd_config trên đích có PubkeyAuthentication no , bạn sẽ luôn được nhắc nhập mật khẩu. Đặt nó thành và khởi động lại sshd (trên máy chủ đích) để bật xác thực pubkey.
C. Kelly

Câu trả lời:


84

Phiên bản openssh mới (7.0+) không dùng nữa các khóa DSA và không sử dụng các khóa DSA theo mặc định (không phải trên máy chủ hoặc máy khách). Các khóa không được ưu tiên sử dụng nữa, vì vậy nếu bạn có thể, tôi khuyên bạn nên sử dụng các khóa RSA nếu có thể.

Nếu bạn thực sự cần sử dụng khóa DSA, bạn cần cho phép rõ ràng chúng trong cấu hình máy khách của mình bằng cách sử dụng

PubkeyAcceptedKeyTypes +ssh-dss

Nên là đủ để đặt dòng đó vào ~/.ssh/config, vì thông điệp dài dòng đang cố nói với bạn.


5
+1, nhưng lời khuyên tốt hơn sẽ là sử dụng loại khóa khác, không dùng nữa, ...
jasonwryan

@jasonwryan Cảm ơn bạn đã bình luận. Chắc chắn rồi. Tôi sẽ cập nhật câu trả lời.
Jakuje

Cảm ơn Jakuje! Điều đó có ý nghĩa, tôi đã không nhận ra dsa là oldhat. Tôi đã tạo một cặp khóa mới ssh-keygenrsa là mặc định bây giờ. Tôi sẽ cố gắng đăng nhập với cái này từ máy khác vào ngày mai.
Damo

Nếu bạn ~/.ssh/configkhông tồn tại, chỉ cần tạo nó. Và nhớ đặt quyền cho xác chết : chmod 600 ~/.ssh/config.
Florian Brucker

@knb đừng làm vậy. Nó sẽ tránh sử dụng bất kỳ thuật toán nào khác trong tương lai, vì bạn đã loại bỏ tất cả các thuật toán đường cong elip.
Jakuje

2

Trong trường hợp của tôi, tôi gặp vấn đề này vì một người dùng khác đã thay đổi AuthorizedKeysFileđịa điểm. Vì không có authorized_keysngười dùng khác ở vị trí này, đăng nhập sẽ mặc định là mật khẩu, mặc dù authorized_keystồn tại với quyền chính xác trong thư mục chính mặc định.

AuthorizedKeysFile   /etc/ssh/%u/authorized_keys

Đã nhận xét dòng sửa đổi này và khởi động lại dịch vụ sshd để quay lại cài đặt mặc định, sau đó cho phép người dùng khác xác thực bằng khóa của họ.


Tôi vừa giải quyết một vấn đề tương tự trên hệ thống RHEL7 trong đó bối cảnh SELinux không được khởi tạo đúng cách trên homedir của người dùng, vì vậy ssh không thể đọc tệp khóa được ủy quyền mặc dù có quyền tiêu chuẩn. Cuối cùng tôi đã chạy restorecon -Rv /homeđể sửa nó cho những người dùng khác, những người cũng được thiết lập không chính xác trên cùng một hệ thống.
dannysauer

1

Tôi đã thử Trả lời của Jakuje Không có may mắn. Nhưng tôi hiểu vấn đề từ đó. Đã thử để thêm bình luận nhưng cần danh tiếng rằng tại sao thêm anwser.

Nhưng tệp cấu hình cho tôi / etc / ssh / ssh_config

  1. sudo nano /etc/ssh/ssh_config
  2. PubkeyAcceptedKeyTypes +ssh-dss Đã thêm dòng này ở phía dưới.
  3. Lưu và thử lại.

Đã làm việc!


1

Chỉ để tóm tắt những gì tôi đã làm để SSH sang mâm xôi Pi .

Trong máy chủ (raspberry Pi):

$ ip addr show 

hoặc đơn giản ip a, điều này sẽ hiển thị địa chỉ IP của máy Pi - host_ip

$ mkdir .ssh

Trong máy khách (ubfox):

$ ssh-keygen -t rsa  

Tín dụng cho @Jakuje ở trên. Ban đầu tôi sử dụng ssh-keygen -t dsa cho việc tạo khóa và ssh cứ hỏi tôi mật khẩu. địa chỉ ip ssh -v không cung cấp cho tôi nhiều thông tin hữu ích, cho đến khi tôi thấy câu trả lời của @ Jakuje

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

thay thế user_id và host_ip, khi được nhắc, hãy cung cấp mật khẩu cho máy Pi

$ ssh user@ip_address

đăng nhập thành công vào PI, không cần thêm mật khẩu


0

Tôi đã không làm việc cho tôi. Rsa đã làm.

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

Và tôi có thể ssh mà không cần mật khẩu.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.