Làm cách nào để tạo ssh thất bại thay vì nhắc mật khẩu nếu xác thực khóa công khai không thành công?


107

Tôi đã có một tập lệnh bao gồm một số máy chủ sử dụng xác thực khóa chung. Một trong các máy chủ đã ngừng cho phép tập lệnh đăng nhập do sự cố cấu hình, điều đó có nghĩa là tập lệnh bị kẹt với lời nhắc "Mật khẩu:", rõ ràng là nó không thể trả lời, do đó, nó thậm chí không thử các máy chủ còn lại trong danh sách.

Có cách nào để yêu cầu khách hàng ssh không nhắc mật khẩu nếu xác thực khóa không thành công, mà thay vào đó chỉ báo cáo lỗi kết nối và để tập lệnh của tôi tiếp tục?

Câu trả lời:


138

Đối với OpenSSH, có BatchMode, ngoài việc vô hiệu hóa nhắc nhở mật khẩu, nên vô hiệu hóa truy vấn cho cụm mật khẩu cho các khóa.

BatchMode

Nếu được đặt thành mật khẩu, có mật khẩu / truy vấn mật khẩu / mật khẩu sẽ bị vô hiệu hóa. Tùy chọn này hữu ích trong các tập lệnh và các công việc hàng loạt khác mà không có người dùng nào có mặt để cung cấp mật khẩu. Đối số phải là tiếng vâng vâng, hay không. Mặc định là không có.

Sử dụng mẫu:

ssh -oBatchMode=yes -l <user> <host> <dostuff>

Điều này vô hiệu hóa xác thực khóa công khai cho tôi. Tuy nhiên, tôi đã chỉ định là người dùng ssh @ host -C somecommand. Những gì đã làm việc cho tôi chỉ làssh user@host -oPreferredAuthentications=publickey -C 'echo success'
AB Carroll

20

Thêm phần sau vào ~/.ssh/config:

PasswordAuthentication no

và để vô hiệu hóa xác thực mật khẩu trên máy chủ, hãy thêm cùng một dòng /etc/ssh/sshd_configvà khởi động lại sshd.


7
nếu bạn không muốn tắt mật khẩu auth cho tất cả các kết nối máy khách ssh, bạn cũng có thể chỉ định các tùy chọn trên dòng lệnh. thêm '-oPasswordAuthentication = no' vào lệnh ssh của bạn.
cas

7
Điều này không ngăn chặn dấu nhắc mật khẩu. Kịch bản của OP vẫn sẽ bị treo.
Joshua Swink

11

Nếu bạn đang sử dụng dropbear, chỉ cần thêm -stùy chọn "" để tắt xác thực mật khẩu.


4
+1 vì không giả sử khách hàng là openssh :-)
cas

8

Trên dòng lệnh (hoặc ~/.ssh/config) bạn có thể đặt PreferredAuthentications.

PreferredAuthentications=publickey

Tôi nghĩ rằng, trên dòng lệnh, bạn cần bọc tùy chọn trong dấu ngoặc kép và sau đó chuyển nó sang tùy chọn -o.
Craig Walker

3
@CraigWalker Bạn cũng có thể vượt qua nó, tức làssh -o PreferredAuthentications=publickey
Tobias Kienzler

@CraigWalker Bạn cần dấu ngoặc kép nếu bạn muốn sử dụng không gian để tách các tùy chọn và giá trị ví dụssh "-oPreferredAuthentications publickey"
Timo
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.