Làm cách nào để thiết lập SSH để tôi không phải nhập mật khẩu và không sử dụng khóa chung?


9

Tôi biết có hàng tá câu hỏi ở đây về cách kết nối với máy chủ SSH mà không cần nhập mật khẩu của bạn mỗi lần và câu trả lời luôn là "sử dụng khóa chung". Chà, tôi thấy mình trong hoàn cảnh hiếm hoi nơi đó thực sự không phải là một lựa chọn. Vì một số lý do không thể giải thích được, daemon OpenSSH trên máy chủ mà tôi đang cố gắng kết nối được cấu hình với

RSAAuthentication no
PubkeyAuthentication no

trong /etc/ssh/sshd_config. Tôi không có quyền truy cập quản trị trên máy chủ vì vậy tôi không thể thay đổi các tùy chọn này hoặc bất kỳ tùy chọn cấu hình máy chủ nào khác. (Tất nhiên, tôi có toàn quyền kiểm soát cấu hình máy khách: OpenSSH 5.8 trên Linux.)

Tùy chọn của tôi là gì và đặc biệt, tùy chọn an toàn nhất là gì để tránh phải nhập mật khẩu mỗi khi tôi muốn SSH vào máy chủ này? Tôi giữ các máy tính của riêng mình được bảo mật khá tốt, vì vậy, giả sử rủi ro bảo mật của việc lưu trữ mật khẩu trong một tệp trên máy khách là thấp, nếu điều đó thực sự cần thiết.

Các phương thức xác thực khác mà máy chủ có thể chấp nhận là API GSS (mà tôi không biết gì về nó), tương tác bàn phím (mà tôi cũng không biết gì về) và mật khẩu. Dưới đây là một số tùy chọn cấu hình có liên quan:

#ChallengeResponseAuthentication yes

#KerberosAuthentication no

GSSAPIAuthentication yes
GSSAPICleanupCredentials yes

#UsePAM no

và đây là -vvdấu vết gỡ lỗi ( ):

debug1: Authentications that can continue: gssapi-with-mic,password,keyboard-interactive
debug1: Next authentication method: gssapi-with-mic
debug1: Unspecified GSS failure.  Minor code may provide more information
Credentials cache file '/tmp/krb5cc_1000' not found
debug1: Unspecified GSS failure.  Minor code may provide more information
Credentials cache file '/tmp/krb5cc_1000' not found
debug1: Unspecified GSS failure.  Minor code may provide more information

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

debug2: we did not send a packet, disable method
debug1: Next authentication method: keyboard-interactive
debug2: userauth_kbdint
debug2: we sent a keyboard-interactive packet, wait for reply
debug1: Authentications that can continue: gssapi-with-mic,password,keyboard-interactive
debug2: we did not send a packet, disable method
debug1: Next authentication method: password

Liệu máy chủ có một /etc/krb5.keytab? GSSAPI (Kerberos) có thể đơn giản để thiết lập phía máy khách; Tuy nhiên, tôi phải hỏi tên máy chủ của máy chủ. (Ngoài ra: keyboard-interactiverất giống với password, ngoại trừ không giới hạn ở một dấu nhắc "Mật khẩu:".)
user1686

@grawity Không /etc/krb5.keytab, nhưng nó có /etc/krb5/krb5.keytab. Tôi không có quyền truy cập vào nội dung. Tên máy chủ là sftp.pass.psu.edu(tôi không nghĩ có bất kỳ tác hại nào trong việc đưa ra tên đó) nếu nó giúp bạn giải thích quy trình.
David Z

Aah, mật khẩu PSU cũ. Những kỷ niệm dễ chịu như vậy. Tôi khá hài lòng với mật khẩu auth. Tại sao bạn không hỏi dân gian điện toán trong trường (là CAC khi tôi đến đó) thay vì tiếp cận với mạng? Ý tôi là, họ đang có một chiếc gương Debian. Họ không phải là tất cả các quản trị viên không biết gì về Windows.
Broam

@Broam Tôi không thể tưởng tượng rằng tôi là người đầu tiên hỏi, vì vậy có lẽ họ có một số lý do để giữ nó theo cách đó ... Mặc dù vậy, tôi cho rằng sẽ không đau khi thử.
David Z

Câu trả lời:


3

Trong trường hợp này, viết (hoặc ghi tốt hơn) một tập lệnh mong đợi sẽ là một trong những lựa chọn của bạn.

Mỗi hệ thống là khác nhau nên sẽ không có tập lệnh, nhưng với tính năng tự động khai thác, rất dễ dàng để ghi tập lệnh cho mục đích này.


Không an toàn, nhưng có một upvote là câu trả lời đơn giản và trực tiếp nhất.
Zac B

điểm tốt. tốt hơn là tất cả những điều này được thực hiện đằng sau một tường lửa và trong một mạng riêng.
johnshen64

8

Từ thông tin thu thập được cho đến nay, máy chủ sftp.pass.psu.eduhỗ trợ xác thực Kerberos 5 (GSSAPI) và đang trêndce.psu.edu địa hạt.

Kerberos rất phổ biến trên các mạng có nhiều máy chủ và máy trạm; nhiều tổ chức giáo dục lớn đã thành lập. Một nếu lợi thế của nó so với xác thực khóa công khai là mộtkinit sẽ tự động cung cấp thông tin đăng nhập cho tất cả các máy trong vương quốc Kerberos mà không phải sao chép các khóa chung cho mỗi máy. Một cách khác là hỗ trợ giao thức - thông tin đăng nhập Kerberos tương tự có thể được sử dụng với hơn 30 giao thức (thư, hệ thống tệp, cơ sở dữ liệu ...), không chỉ SSH.

(Liên quan đến "quản trị viên không biết Windows": dce.psu.edu lĩnh vực này thực sự xuất hiện dựa trên Active Directory và được lưu trữ bởi các máy chủ Windows.)

Hãy thử làm theo các bước sau:

  1. Đăng nhập vào Kerberos. (Các kinitklist công cụ có thể nằm trong "krb5-user" hoặc gói tương tự, nếu chưa được bao gồm trong hệ thống.)

    kinit your_username @ dce.psu.edu
    

    Nếu không có lỗi nào được hiển thị, đăng nhập đã thành công. klistsẽ hiển thị một krbtgt/dce.psu.edu@...mục "".

  2. Bây giờ kết nối với máy chủ SSH, với các -vvtùy chọn; nếu xác thực thành công, tốt.

    Nếu không, bạn có thể phải chỉnh sửa /etc/krb5.conftệp của mình . Trong [domain_realm]phần, thêm vào như sau:

    [domain_realm]
        .psu.edu = dce.psu.edu
    
  3. Với cài đặt Krb5 mặc định, vé thu được ở # 1 sẽ có hiệu lực trong 10 giờ và có thể gia hạn tối đa một tuần. Tôi không có cách nào để xác minh các cài đặt, tuy nhiên.

    Nếu bạn muốn giữ mật khẩu trong một tập tin, một cách đơn giản kinit your_principal < password.txt nên hoạt động, mặc dù nó không hoàn toàn đáng tin cậy.

    Với ktutilnó có thể tạo một "keytab" để sử dụng thay vì mật khẩu.

    $ ktutil
    ktutil: addent -password -p your_principal -k 1 -e aes256-cts-hmac-sha1-96
    Mật khẩu cho your_principal : *********
    ktutil: wkt keytab_file 
    ktutil:  CtrlD
    

    và đăng nhập bằng:

    $ kinit -kt keytab_file  your_principal
    

Điều này có vẻ như khá gần với lý tưởng đối với tôi, nhưng dường như nó không hoạt động - tôi đã có thể đăng nhập bằng Kerberos thành công (không có thông báo lỗi), nhưng tôi vẫn được nhắc nhập mật khẩu. Thông báo lỗi ssh -vvtương tự như dấu vết tôi đã đăng trừ khi tôi nhận được debug1: Unspecified GSS failure. Minor code may provide more information\n Server not found in Kerberos databasethay vì thông tin về tệp bộ đệm thông tin xác thực không được tìm thấy.
David Z

À, có vẻ như "quản trị viên không biết gì về Windows" đã thiết lập keytab cho host/sftp.pass.psu.edu, nhưng tên thật của nó phải là host/lutz.cac.psu.edu. Bạn có thể khắc phục điều này bằng cách thêm " 128.118.2.85 sftp.pass.psu.edu" vào / etc / hosts của mình, nhưng nó sẽ xấu hơn - sẽ đẹp hơn nhiều nếu quản trị viên sửa máy chủ ...
user1686

Vâng, nó sẽ ... Tôi sẽ hỏi họ về điều đó, nhưng bây giờ hy vọng bản sửa lỗi của bạn sẽ giải quyết mọi thứ. Tôi sẽ thử nó vào ngày mai.
David Z

@DavidZaslavsky: Có thể hữu ích khi đề cập với họ rằng MIT Krb5 v1.10 hỗ trợ nhiều hiệu trưởng máy chủ (tức là cả hai host/lutz.cac.psu.eduhost/sftp.pass.psu.edu) trong một keytab. (Các phiên bản trước chỉ sử dụng phiên bản đầu tiên.)
user1686

Xin lỗi tôi quên trở lại và cung cấp thông tin phản hồi về điều này. Sau khi sửa đổi /etc/hoststheo đề nghị tôi nhận được debug1: Unspecified GSS failure. Minor code may provide more information Generic error (see e-text). Không có gì khác trong đầu ra có liên quan đến lỗi.
David Z

3

Tôi sẽ xem xét một giải pháp hỗn hợp, trong đó bạn nhập mật khẩu chỉ một lần và máy tính duy trì một ổ cắm cho máy chủ SSH từ xa. Bạn có thể làm theo các bước sau để thiết lập ControlMastervì lý do đó.


Kết nối chính sẽ thiết lập lại khi tôi tắt máy khách. Vì vậy, đây không phải là một giải pháp lý tưởng, nhưng nó sẽ là một cải thiện nhỏ so với tình hình hiện tại của tôi.
David Z

Sử dụng screenđể bảo vệ đạn khỏi chấm dứt khi ngắt kết nối hoặc treo máy.
LawrenceC
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.