Không thể thiết lập đăng nhập ssh mà không cần nhập mật khẩu


8

Tôi tự động thiết lập đăng nhập ssh mà không cần nhập mật khẩu vào máy chủ bằng cách:

cd ~/.ssh

ssh-keygen

ssh-copy-id -i ~/.ssh/id_rsa.pub tim@server1

Nó hoạt động trên máy chủ.

Sau đó tôi đã làm tương tự trên một máy chủ khác.

ssh-copy-id -i ~/.ssh/id_rsa.pub tim@server2

Ngay lập tức tôi ssh tim@server2, nhưng nó vẫn yêu cầu mật khẩu của tôi. Tôi đã làm điều gì đó không chính xác? Một số lý do có thể khiến tôi không thiết lập thành công trên máy chủ thứ hai là gì? (lưu ý rằng máy chủ thứ hai chạy hệ thống tệp kerberos và Andrew)

$ ssh -v tim@server2
OpenSSH_6.6.1, OpenSSL 1.0.1f 6 Jan 2014
debug1: Reading configuration data /etc/ssh/ssh_config
debug1: /etc/ssh/ssh_config line 19: Applying options for *
debug1: Connecting to server2 [...] port 22.
debug1: Connection established.
debug1: identity file /home/tim/.ssh/id_rsa type 1
debug1: identity file /home/tim/.ssh/id_rsa-cert type -1
debug1: identity file /home/tim/.ssh/id_dsa type -1
debug1: identity file /home/tim/.ssh/id_dsa-cert type -1
debug1: identity file /home/tim/.ssh/id_ecdsa type -1
debug1: identity file /home/tim/.ssh/id_ecdsa-cert type -1
debug1: identity file /home/tim/.ssh/id_ed25519 type -1
debug1: identity file /home/tim/.ssh/id_ed25519-cert type -1
debug1: Enabling compatibility mode for protocol 2.0
debug1: Local version string SSH-2.0-OpenSSH_6.6.1p1 Ubuntu-2ubuntu2
debug1: Remote protocol version 2.0, remote software version OpenSSH_5.3
debug1: match: OpenSSH_5.3 pat OpenSSH_5* compat 0x0c000000
debug1: SSH2_MSG_KEXINIT sent
debug1: SSH2_MSG_KEXINIT received
debug1: kex: server->client aes128-ctr hmac-md5 none
debug1: kex: client->server aes128-ctr hmac-md5 none
debug1: SSH2_MSG_KEX_DH_GEX_REQUEST(1024<3072<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: Server host key: RSA xxx
debug1: Host 'server2' is known and matches the RSA host key.
debug1: Found key in /home/tim/.ssh/known_hosts:70
debug1: ssh_rsa_verify: signature correct
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,gssapi-keyex,gssapi-with-mic,password,keyboard-interactive
debug1: Next authentication method: gssapi-keyex
debug1: No valid Key exchange context
debug1: Next authentication method: gssapi-with-mic
debug1: Unspecified GSS failure.  Minor code may provide more information
No Kerberos credentials available

debug1: Unspecified GSS failure.  Minor code may provide more information
No Kerberos credentials available

debug1: Unspecified GSS failure.  Minor code may provide more information


debug1: Unspecified GSS failure.  Minor code may provide more information
No Kerberos credentials available

debug1: Next authentication method: publickey
debug1: Offering RSA public key: /home/tim/.ssh/id_rsa
debug1: Authentications that can continue: publickey,gssapi-keyex,gssapi-with-mic,password,keyboard-interactive
debug1: Trying private key: /home/tim/.ssh/id_dsa
debug1: Trying private key: /home/tim/.ssh/id_ecdsa
debug1: Trying private key: /home/tim/.ssh/id_ed25519
debug1: Next authentication method: keyboard-interactive
Password:

Tôi đã thử phương pháp sử dụng khóa Diffie-Hellman của Anthon, nhưng nó vẫn hỏi tôi mật khẩu.

$ cd ~/.ssh
$ ssh-keygen -t dsa
$ ssh-copy-id -i ~/.ssh/id_dsa.pub tim@server2
$ ssh -v tim@server2
OpenSSH_6.6.1, OpenSSL 1.0.1f 6 Jan 2014
debug1: Reading configuration data /etc/ssh/ssh_config
debug1: /etc/ssh/ssh_config line 19: Applying options for *
debug1: Connecting to server2 [...] port 22.
debug1: Connection established.
debug1: identity file /home/tim/.ssh/id_rsa type 1
debug1: identity file /home/tim/.ssh/id_rsa-cert type -1
debug1: identity file /home/tim/.ssh/id_dsa type 2
debug1: identity file /home/tim/.ssh/id_dsa-cert type -1
debug1: identity file /home/tim/.ssh/id_ecdsa type -1
debug1: identity file /home/tim/.ssh/id_ecdsa-cert type -1
debug1: identity file /home/tim/.ssh/id_ed25519 type -1
debug1: identity file /home/tim/.ssh/id_ed25519-cert type -1
debug1: Enabling compatibility mode for protocol 2.0
debug1: Local version string SSH-2.0-OpenSSH_6.6.1p1 Ubuntu-2ubuntu2
debug1: Remote protocol version 2.0, remote software version OpenSSH_5.3
debug1: match: OpenSSH_5.3 pat OpenSSH_5* compat 0x0c000000
debug1: SSH2_MSG_KEXINIT sent
debug1: SSH2_MSG_KEXINIT received
debug1: kex: server->client aes128-ctr hmac-md5 none
debug1: kex: client->server aes128-ctr hmac-md5 none
debug1: SSH2_MSG_KEX_DH_GEX_REQUEST(1024<3072<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: Server host key: RSA ...
debug1: Host 'server2' is known and matches the RSA host key.
debug1: Found key in /home/tim/.ssh/known_hosts:70
debug1: ssh_rsa_verify: signature correct
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,gssapi-keyex,gssapi-with-mic,password,keyboard-interactive
debug1: Next authentication method: gssapi-keyex
debug1: No valid Key exchange context
debug1: Next authentication method: gssapi-with-mic
debug1: Unspecified GSS failure.  Minor code may provide more information
No Kerberos credentials available

debug1: Unspecified GSS failure.  Minor code may provide more information
No Kerberos credentials available

debug1: Unspecified GSS failure.  Minor code may provide more information


debug1: Unspecified GSS failure.  Minor code may provide more information
No Kerberos credentials available

debug1: Next authentication method: publickey
debug1: Offering DSA public key: /home/tim/.ssh/id_dsa
debug1: Authentications that can continue: publickey,gssapi-keyex,gssapi-with-mic,password,keyboard-interactive
debug1: Offering RSA public key: /home/tim/.ssh/id_rsa
debug1: Authentications that can continue: publickey,gssapi-keyex,gssapi-with-mic,password,keyboard-interactive
debug1: Trying private key: /home/tim/.ssh/id_ecdsa
debug1: Trying private key: /home/tim/.ssh/id_ed25519
debug1: Next authentication method: keyboard-interactive
Password:

Là thư mục nhà của bạn được gắn kết sau khi bạn đăng nhập?
muru

Sau mỗi lần đăng nhập trong quá khứ, nhà của tôi luôn được gắn kết.
Tim

Có, một khi bạn đăng nhập, bạn nhận được thư mục chính của mình - nhưng trước khi đăng nhập hoàn tất thì sao? (Xem xét các thư mục nhà được mã hóa hoặc thư mục nhà mạng, v.v.)
muru

Tôi nghe nói server2sử dụng hệ thống tập tin Andrew. Điều đó có nghĩa là nhà của tôi không được gắn kết trước khi đăng nhập hoàn tất? Làm thế nào tôi có thể tìm ra nó cho câu hỏi của bạn?
Tim

Tôi không chắc hệ thống tập tin Andrew hoạt động như thế nào, nhưng nếu bạn có một thông tin đăng nhập khác tại cùng một máy chủ, hãy sử dụng nó và xem bạn có thể xem nội dung của timthư mục chính không.
muru

Câu trả lời:


10

Bạn đề cập rằng máy chủ thứ hai đang sử dụng Hệ thống tệp Andrew (AFS).

Tôi đã không làm việc với điều đó, nhưng theo những gì tôi hiểu, AFS là một hệ thống tệp được bảo mật bởi Kerberos, đòi hỏi phải có vé kerberos để hoạt động. Điều đó có nghĩa là bạn cần phải đăng nhập vào vương quốc Kerberos của trang web của bạn để có thể truy cập vào thư mục chính của bạn.

Nếu bạn đăng nhập bằng mật khẩu, server2có khả năng nó sẽ được thiết lập để nó đăng nhập bạn vào vương quốc Kerberos của bạn thông qua PAM. Tuy nhiên, nếu bạn đang sử dụng các khóa SSH, thì server2bạn sẽ không nhận được thông tin cần thiết để làm điều đó và bạn sẽ không thể truy cập vào thư mục chính của mình.

May mắn thay, từ ssh -vđầu ra trong câu hỏi của bạn, chúng tôi có thể suy ra rằng máy chủ của bạn đã GSSAPIkích hoạt xác thực. Điều này sẽ cho phép bạn thực hiện đăng nhập không mật khẩu, miễn là bạn có một vé kerberos hợp lệ cho vương quốc của bạn. Làm như sau:

  • Đăng nhập server2và chạy klistchương trình. Điều này sẽ trả lại một cái gì đó dọc theo các dòng sau:

    Ticket cache: FILE:/tmp/krb5cc_2000
    Default principal: wouter@EXAMPLE.ORG
    
    Valid starting     Expires            Service principal
    28-05-15 15:01:31  29-05-15 01:01:31  krbtgt/EXAMPLE.ORG@EXAMPLE.ORG
        renew until 29-05-15 15:01:28
    28-05-15 15:02:04  29-05-15 01:01:31  IMAP/example.org@EXAMPLE.ORG
        renew until 29-05-15 15:01:28
    

    tìm dòng mà bắt đầu với Default principal:. Nó cho bạn biết hiệu trưởng kerberos của bạn là gì (trong ví dụ trên, đó là wouter@EXAMPLE.ORG). Viết cái này vào. Lưu ý rằng đó không phải là một địa chỉ email và nó phân biệt chữ hoa chữ thường; tức là hiệu trưởng kết thúc bằng EXAMPLE.ORG, không example.org.

  • Trên máy khách của bạn, hãy chạy kinitvới tên hiệu trưởng của bạn (nghĩa là trong ví dụ trên, đó sẽ là kinit wouter@EXAMPLE.ORG). Nếu mọi việc suôn sẻ, khi bạn chạy klistlại bây giờ, bạn sẽ thấy rằng bạn có bộ đệm vé trên máy cục bộ của mình.
  • Nếu bây giờ bạn chạy ssh -K server2, bạn sẽ có thể đăng nhập và hệ thống không nên yêu cầu mật khẩu.

Xin lưu ý rằng do cách Kerberos hoạt động, bộ đệm vé có hiệu lực hạn chế. Không thể yêu cầu bộ đệm vé có giá trị lâu hơn so với những gì quản trị viên cảnh giới đã cấu hình (thường là khoảng 10 giờ hoặc lâu hơn). Khi vé của bạn đã hết hạn, bạn sẽ cần phải chạy kinitlại và nhập mật khẩu của bạn một lần nữa.


cảm ơn. "Trên máy khách của bạn, hãy chạy kinit", ý bạn là tôi phải cài đặt Kerberos trên Ubuntu cục bộ của mình?
Tim

Một phần của các công cụ kerberos, vâng. Bạn sẽ tìm thấy các công cụ cần thiết trong krb5-usergói.
Wouter Verhelst

Tôi nên sử dụng rsa hoặc dsa khi tạo các khóa công khai và sao chép chúng vào máy chủ? (Tôi đã làm theo đề xuất của Anthon để sử dụng dsa ngay bây giờ)
Tim

Do AFS trên máy chủ, bạn không thể sử dụng các khóa công khai SSH, thay vào đó bạn cần sử dụng kerberos. Vì vậy, nó không thành vấn đề ;-)
Wouter Verhelst

GSSAPI, dsa và rsa có phải là tất cả các phương thức xác thực không?
Tim

5

Bạn nên thử kết nối với server2 bằng:

ssh -v tim@server2

và so sánh với cùng, kết nối với server1điều này sẽ cho bạn biết chính xác nơi hai máy chủ khác nhau.

Nhiều khả năng có sự khác biệt ở /etc/ssh/sshd_configcả hai máy. nơi server2hoặc của bạn ~/.sshcó vấn đề tiếp cận (không đủ hạn chế).

Từ -vđầu ra, bạn có thể thấy rằng bạn cung cấp khóa riêng RSA để xác minh (trong /home/tim/.ssh/id_rsa), nhưng có vẻ như server2chỉ hỗ trợ Diffie-Hellman (và thử /home/tim/.ssh/id_dsanhững thứ có lẽ thậm chí không có ở đó).


cảm ơn, tôi đã cập nhật với đầu ra của việc chạy lệnh của bạn. Không chắc chắn về ý nghĩa của nó
Tim

@Tim đã cập nhật câu trả lời của tôi, bạn nên kiểm tra với quản trị viên server2 tại sao nó không hỗ trợ khóa riêng / công khai RSA.
Anthon

Bên cạnh việc hỏi quản trị viên (điều mà tôi nghĩ là không thể thực hiện bất kỳ thay đổi nào dựa trên trải nghiệm của tôi), có cách nào để làm việc với những gì máy chủ mong đợi không?
Tim

@Tim, trước tiên hãy đảm bảo rằng ~/.sshtrên máy chủ thực sự đã cài đặt khóa ủy quyền của bạn ( ~/.ssh/authorized_keys). Sau đó, những gì bạn có thể cố gắng làm là ssh-keygentạo ra một cặp khóa diffie-hellman bằng cách sử dụng ssh-keygen -t dsavà sao chép nó.
Anthon

(1) Có một tập tin ~/.ssh/authorized_keystrên máy chủ. Điều đó có nghĩa là nó đã cài đặt các khóa được ủy quyền? (2) làm cách nào để sao chép cặp khóa diffie-hellman được tạo vào máy chủ? bởi scp ~/.ssh/id_dsa.pub tim@server2:~/.ssh/authorized_keys? điều đó sẽ ghi đè lên ~/.ssh/authorized_keysmáy chủ?
Tim

4

Thêm mục sau vào máy khách mà bạn đang cố gắng ssh.

tập tin cấu hình: /etc/ssh/ssh_config

GSSAPIAuthentication no

Sau đó bạn sẽ có thể ssh vào máy.

Nếu bạn không có quyền chỉnh sửa cho tệp đó, bạn cũng có thể thêm

Host *
  GSSAPIAuthentication no

to ~/.ssh/config(tạo tập tin này nếu nó không tồn tại)

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.