it-swarm-vi.com

Có thể sử dụng cả khóa riêng và xác thực mật khẩu để đăng nhập ssh?

Dường như chúng là loại trừ lẫn nhau, vì việc vô hiệu hóa cái này mang lại cho tôi cái khác và ngược lại. Auth hai yếu tố cho các máy chủ ssh của tôi nghe có vẻ rất hay, vậy có cách nào để thực hiện điều này không?

56
chrisdotcode

Với các bản phát hành gần đây của Fedora và RHEL 6, bạn có thể sử dụng RequiredAuthentications2 pubkey,password để yêu cầu cả xác thực mật khẩu pubkey . Thông thường, điều này được thực hiện để yêu cầu mã thông báo xác thực pubkey và 2 yếu tố, không phải mật khẩu của người dùng.

Cập nhật: Bây giờ trên RHEL/CentOS 7 và bất kỳ hệ thống nào có phiên bản OpenSSH gần đây, bạn có thể sử dụng:

AuthenticationMethods "publickey,password" "publickey,keyboard-interactive"

Cũng có thể sử dụng lệnh Match để loại trừ IP hoặc Người dùng.

48
mricon

Bạn có thể xác thực cả khóa công khai và mật khẩu trên cùng một máy chủ. Nếu xác thực khóa công khai không thành công, nó sẽ chuyển đến xác thực mật khẩu.

Khi yêu cầu cả hai, điều đó có vẻ ngớ ngẩn và phản tác dụng, và kiểm tra man sshd_config không có tùy chọn để làm điều này.

Khóa riêng ssh của bạn phải có cụm mật khẩu an toàn. Vì vậy, nếu kẻ tấn công có được khóa riêng của bạn, họ vẫn không thể làm gì nếu không có cụm mật khẩu của bạn. Nếu họ đã xâm phạm cụm mật khẩu đó (rất có thể là với một keylogger hoặc từ vũ phu buộc một cụm mật khẩu cực kỳ yếu), họ cũng có thể lấy/bẻ khóa bất kỳ mật khẩu ghi nhớ nào.

Nếu bạn thực sự muốn, bạn có thể thiết lập một cái gì đó bằng ForceCommand (ví dụ: chỉ cho phép xác thực khóa công khai và sau đó hướng người dùng đến Shell nhắc mật khẩu). Tôi không khuyên bạn điều này.

Một cách khác tốt hơn nếu bạn muốn hạn chế phơi sáng, là thiết lập tường lửa để giới hạn IP có thể tiếp cận cổng ssh; có thể với một VPN bổ sung đang chạy trên một máy chủ ở đâu đó nếu bạn có thể cần phải đào hầm từ một máy tính khác tại một số điểm. Bạn cũng có thể sử dụng một cái gì đó như để mở một lỗ hổng trên tường lửa sau một kiểu gõ cổng cụ thể, mặc dù nhận ra rằng bất kỳ ai nghe lén lưu lượng truy cập đều có thể phát lại mô hình gõ để mở cổng.

18
dr jimbob

(đăng chéo câu trả lời SO với giải pháp cập nhật cho những ngày này)

Nếu bạn đọc qua trang hướng dẫn cho sshd_config(5), có tùy chọn AuthenticationMethods, trong đó có danh sách các phương thức bạn cần vượt qua trước khi bạn được cấp quyền truy cập. Thiết lập cần thiết của bạn là:

AuthenticationMethods publickey,password

Phương pháp này sẽ hoạt động tất cả các hệ thống Linux hiện tại với openssh gần đây (openssh-6, openssh-7).

Hệ thống cũ

Ngoại lệ duy nhất tôi biết là RHEL 6 (openssh-5.3), yêu cầu thiết lập tùy chọn khác nhau với cùng các giá trị (như được mô tả trong câu trả lời khác):

RequiredAuthentications2 publickey,password
12
Jakuje

Tôi nhìn vào điều này nhiều hơn một chút và đưa ra những điều sau đây.

Bạn có thể sử dụng PAM cho xác thực hai yếu tố, nhưng khi làm như vậy bạn sẽ không sử dụng các khóa SSH, bạn sẽ sử dụng hai yếu tố khác nhau.

Ví dụ: Bạn có thể sử dụng google với xác thực hai yếu tố của họ và sử dụng pam để xác thực, như được mô tả tại

http://www.techrepublic.com/blog/opensource/two-factor-ssh-authentication-via-google-secures-linux-logins/2607

4
Phillip Nordwall

Giải pháp duy nhất hiệu quả với tôi là có những gì tiếp theo trong/etc/ssh/sshd_config (được thử nghiệm với CentOS7):

PubkeyAuthentication yes 
AuthenticationMethods publickey password
AuthorizedKeysFile      .ssh/authorized_keys
PasswordAuthentication yes 
PermitEmptyPasswords no
ChallengeResponseAuthentication no
UsePAM yes

Điều đó có nghĩa là đã bật PAM, để kích hoạt mọi dòng liên quan đến khóa publik và cuối cùng, để có Xác thựcMethod liệt kê chính xác cả hai phương thức. Xin lưu ý rằng, mặc dù là được viết bởi Jakuje , bạn không nên thêm dấu phẩy giữa publickey mật khẩu sau Xác thựcMethods.

2
Luca Scotto Lavina