Đang cố gắng lấy SSH bằng khóa chung (không có mật khẩu) + trình xác thực google hoạt động trên Ubuntu 14.04.1


20

Tôi đang sử dụng Ubuntu 14.04.1 (với OpenSSH 6.6 và libpam-google-Authenticator 20130529-2).

Tôi đang cố gắng thiết lập thông tin đăng nhập SSH nơi khóa công khai xác thực (không có mật khẩu) và người dùng được nhắc nhập mã từ Trình xác thực của Google.

Làm theo / điều chỉnh các hướng dẫn này đã giúp tôi nhận được lời nhắc mật khẩu cũng như lời nhắc Google Auth:

Tôi đã cài đặt gói, chỉnh sửa /etc/ssh/sshd_config/etc/pam.d/sshcác tập tin của tôi

Trong /etc/ssh/sshd_config:

ChallengeResponseAuthentication yes
AuthenticationMethods  publickey,keyboard-interactive
UsePAM yes

và ở dưới cùng của /etc/pam.d/ssh:

auth required pam_google_authenticator.so nullok # (I want to give everyone a chance to set up their 2FA before removing "nullok")

Tôi biết PAM là phụ thuộc đơn hàng, nhưng sshd_configcũng được?

Tôi đang làm gì sai? Bất kỳ trợ giúp sẽ được đánh giá cao.

Câu trả lời:


28

Có nó hoạt động tốt, đầu tiên đã làm:

apt-get install libpam-google-authenticator

Trong /etc/pam.d/sshdtôi đã thay đổi / thêm các dòng sau (ở trên cùng):

# @include common-auth
auth required pam_google_authenticator.so

Và trong /etc/ssh/sshd_config:

ChallengeResponseAuthentication yes
UsePAM yes
AuthenticationMethods publickey,keyboard-interactive
PasswordAuthentication no

Hoạt động tốt và bây giờ tôi nhận được lời nhắc "Mã xác minh" sau khi xác thực bằng khóa chung. Tôi không chắc chắn làm thế nào tôi có thể cho phép xác thực bằng mật khẩu + mã thông báo HOẶC khóa + mã thông báo, vì hiện tại tôi đã xóa phương thức xác thực mật khẩu khỏi PAM một cách hiệu quả.

Sử dụng Ubuntu 14.04.1 LTS (GNU / Linux 3.8.0-19-generic x86_64) với ssh -v: OpenSSH_6.6.1p1 Ubuntu-2ubfox2, OpenSSL 1.0.1f ngày 6 tháng 1 năm 2014


Vì vậy, vì lợi ích của hậu thế, tôi nhận ra vấn đề của mình. Tôi cũng đã thử PasswordAuthentication no, nhưng đó không phải là nó. Vấn đề là / tôi đã có / có ControlMaster autoControlPathchỉ thị trong tệp ~ / .ssh / config của tôi. Tôi muốn đảm bảo rằng tôi đã không tự khóa mình, vì vậy tôi sẽ luôn để phiên SSH mở. Vì máy tính của tôi sẽ sử dụng lại chúng, tôi luôn truy cập mà không cần hệ thống yêu cầu mã thông báo. Tôi đã đánh dấu câu trả lời của bạn là chính xác, vì ai đó theo dõi nó thực sự sẽ có được một thiết lập hoạt động. Cảm ơn!
JT.

2
Tôi sử dụng CentOS 7. Tôi có PasswordAuthentication no, ChallengeResponseAuthentication yes, AuthenticationMethods publickey,keyboard-interactive, và UsePAM yestrong sshd_config. Nó xác thực khóa của tôi và sau đó hỏi tôi mã thông báo Google Authenticator của tôi và sau đó cũng hỏi tôi mật khẩu của tôi. Khiến tôi làm cả ba trò chơi không thể bỏ qua bất kỳ ai trong số họ. Tôi cũng đã thử AuthenticationMethods publickey,keyboard-interactive:pamtheo đề xuất của trang người đàn ông, nhưng điều đó không thay đổi gì cả. Có ý kiến ​​gì không?
Nick Williams

6
@NickWilliams Tôi cũng gặp vấn đề tương tự. Điều cố định nó cho tôi là tôi cần phải khen ngợi @include common-authdòng mà câu trả lời hiển thị. Tôi chỉ nghĩ rằng đó là một nhận xét cho pam_google_authenticatordòng trong /etc/pam.d/sshd lúc đầu.
freb

5
Cảm ơn bạn! Giải pháp của tôi không hoàn toàn giống nhau (tôi cần bình luận auth substack password-auth), nhưng bình luận của bạn đã giải quyết vấn đề của tôi!
Nick Williams


7

Cuối cùng tôi đã có thể làm cho nó hoạt động bằng cách đặt auth [success=done new_authtok_reqd=done default=die] pam_google_authenticator.so nullokở đầu /etc/pam.d/sshd.

Theo trang người đàn ông pam.d :

  • success=done có nghĩa là nếu Google Authenticator tắt, sẽ không có thêm xác thực nào, nghĩa là không có dấu nhắc mật khẩu bổ sung.
  • default=die có nghĩa là nếu Google Authenticator từ chối nỗ lực đăng nhập, xác thực sẽ ngay lập tức thất bại, bỏ qua lời nhắc mật khẩu.

Vì vậy, [success=done new_authtok_reqd=done default=die]là một sự pha trộn giữa các giá trị sufficientrequisitekiểm soát, vì chúng ta muốn hành vi từ cả hai: nếu thành công, chấm dứt ngay lập tức (đủ) và nếu thất bại, cũng chấm dứt ngay lập tức (cần thiết).

Lưu ý rằng nullokđối số với pam_google_authenticator.so có nghĩa là nếu ~/.google_authenticatorkhông tìm thấy tệp cho người dùng, xác thực khóa công khai sẽ diễn ra như bình thường. Điều này hữu ích nếu tôi chỉ muốn khóa một tập hợp con các tài khoản của mình bằng 2FA.


6

Câu trả lời của Linus Kendall nên hoạt động trên các hệ thống cũ, nhưng trên các máy Linux mới hơn thì có vấn đề; trên máy chủ web dựa trên linux arch của tôi, cấu hình đó dẫn đến việc pam yêu cầu mã xác thực và mật khẩu của tôi sau khi nhận được khóa ssh của tôi (tức là tôi cần cả 3).

Một giải pháp đơn giản hơn ngăn chặn vấn đề này và sẽ hoạt động trên mọi hệ thống là thay đổi mục nhập /etc/pam.d/sshdthành:

auth sufficient pam_google_authenticator.so

Và sau đó thực hiện các chỉnh sửa tương tự với `` / etc / ssh / sshd` mà Linus đã đề cập:

ChallengeResponseAuthentication yes
UsePAM yes
AuthenticationMethods publickey,keyboard-interactive
PasswordAuthentication no

Điều đó sẽ hỏi bạn mã thông báo xác thực của bạn sau khi máy chủ chấp nhận khóa chung của bạn. Nó không nên yêu cầu mật khẩu của bạn.

Là một lưu ý phụ, nếu bạn muốn có một tài khoản người dùng sftp, có lẽ bạn sẽ cần phải bỏ qua trình xác thực google để làm cho nó hoạt động. Dưới đây là một gợi ý về cách thực hiện điều đó một cách an toàn bằng cách sử dụng nhà tù sftp. Trong etc/ssh/sshd_config:

Subsystem sftp internal-sftp
Match User ftp-user
  PasswordAuthentication yes
  AuthenticationMethods password
  ChrootDirectory /path/to/ftp/dir
  ForceCommand internal-sftp

Bạn sẽ cần phải thực hiện các điều khoản trên / path / to / ftp / dir gốc ghi duy nhất (ví dụ như chown root:root /path/to/ftp/dir, chmod 755 /path/to/ftp/dir. Tất cả các bậc cha mẹ trên thư mục đó cũng cần cho phép an toàn. Con đường tôi thường làm điều này là bằng cách làm cho thư mục chroot /home/shared/user, tạo ra một thư mục trong đó (ví dụ 'dữ liệu') và sau đó gắn bất kỳ thư mục nào tôi muốn chia sẻ như thế này:sudo mount -o bind /path/to/ftp/dir /home/shared/user/data

Nếu bạn làm theo tất cả các bước đó, bạn sẽ có khóa công khai + đăng nhập google xác thực cho người dùng ssh của bạn và tài khoản sftp được bảo vệ bằng mật khẩu chức năng để truyền dữ liệu.


Điều này làm việc tuyệt vời. Và vì một số lý do tôi không cảm thấy thoải mái khi bình luận về auth chung, điều này lý tưởng hơn giải pháp của Linus.
Luke Sapan

Cảm ơn rất nhiều! lãng phí một đêm ssh gỡ lỗi, tự hỏi tại sao tôi vẫn phải gõ mật khẩu sau pubkey + authcode
felix021
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.