Làm thế nào để buộc ssh client chỉ sử dụng mật khẩu auth?


375

Nếu tôi sử dụng pubkey auth từ ví dụ: Ubuntu 11.04, làm cách nào tôi có thể đặt ứng dụng khách ssh chỉ sử dụng mật khẩu auth cho máy chủ? (chỉ cần vì kiểm tra mật khẩu trên máy chủ, nơi tôi đăng nhập mặc định bằng khóa)

Tôi tìm thấy một cách:

mv ~/.ssh/id_rsa ~/.ssh/id_rsa.backup
mv ~/.ssh/id_rsa.pub ~/.ssh/id_rsa.pub.backup

và bây giờ tôi được nhắc nhập mật khẩu, nhưng có cách nào chính thức không?

Câu trả lời:


579

Gần đây tôi cũng cần cái này và nghĩ ra cái này:

ssh -o PreferredAuthentications=password -o PubkeyAuthentication=no example.com

Bạn cần đảm bảo rằng máy khách không được cấu hình để không cho phép xác thực mật khẩu.


4
Tôi cần phải thực thi lời nhắc mật khẩu để xuất hiện trong môi trường nơi Kerberos được sử dụng để xác thực tự động và một lệnh tương tự đã hoạt động với tôi trong tình huống cụ thể đó: ssh -o GSSAPIAuthentication=no example.com
IllvilJa

21
Đẹp. Chỉ -o PubkeyAuthentication=nolà đủ trong trường hợp của tôi.
mivk

10
để ssh vào một máy tính xách tay osx bạn bè, tôi đã phải sử dụng: -o PreferredAuthentications=keyboard-interactive -o PubkeyAuthentication=no thay vào đó
guido

4
Điều này không làm việc cho tôi. Nó cứ nói: Quyền bị từ chối (khóa công khai). và không bao giờ cung cấp một dấu nhắc mật khẩu.
Revierpost

7
@reinierpost có khả năng vì máy chủ ssh đã bị vô hiệu hóa PasswordAuthentication. Trên thực tế, tôi ở đây vì tôi muốn kiểm tra việc vô hiệu hóa mật khẩu auth hoạt động chính xác trên máy chủ của tôi.
RubberDuck

169

Tôi đã phát hiện ra một lối tắt cho mục đích này:

ssh user:@example.com

Lưu ý dấu hai chấm ( :) và mật khẩu trống sau nó.


2
Chưa có tài liệu nào. Trên thực tế, tôi đã lướt qua mã nguồn OpenSSH nhưng không có kết quả (giai đoạn phân tích cú pháp của nó khá khó hiểu và trời sáng ở đây :)). Động lực ban đầu của tôi: nhiều khách hàng nhắc nhập mật khẩu nếu bạn đưa ra một mật khẩu trống, ví dụ:mysql -u user -p
Halil Özgür

43
Điều này dường như không còn hoạt động nữa, ít nhất là trong trường hợp của tôi. sshkhách hàng đã mù quáng thử các khóa riêng không liên quan để xác thực với máy chủ mới được cài đặt và tiếp tục bị từ chối do số lượng cố gắng tối đa đạt được mà không bao giờ yêu cầu mật khẩu. Để buộc xác thực mật khẩu cho kết nối đầu tiên này, tôi đã phải sử dụng -o PreferredAuthentications=passwordcú pháp, thủ thuật dấu hai chấm không có tác dụng đáng chú ý. Vì vậy, trong khi thủ thuật này có thể đáng để thử, người ta không nên dựa vào nó như một hành vi nhất quán.
WhiteWinterWolf

2
@ HalilÖzgür: Tin buồn, việc nhớ và gõ dễ dàng hơn nhiều ;)!
WhiteWinterWolf

3
@Qualcuno như WhiteWinterWolf nói, nó không hoạt động trên một số nền tảng nữa, thật không may.
Halil Özgür

2
Đảm bảo rằng bạn không có Mật khẩu xác thực không có trong tệp ssh_config của bạn!
Braiam

32

Cũng như phương thức được đăng bởi scoopr, bạn có thể đặt từng tùy chọn máy chủ trong tệp cấu hình máy khách ssh của mình.

Trong .sshthư mục của bạn , tạo một tệp có tên config(nếu nó chưa tồn tại) và đặt quyền 600, sau đó bạn có thể tạo các phần bắt đầu bằng

host <some hostname or pattern>

và sau đó đặt cho mỗi tùy chọn máy chủ sau đó, ví dụ:

host bob.specific.foo
user fred

host *.home.example
user billy
port 9191

để bạn có thể có

host server.to.test
PubkeyAuthentication=no

trong tập tin đó, và sau đó chỉ đơn giản là

ssh server.to.test

và tùy chọn sẽ được chọn.


Cảm ơn câu trả lời này. Tôi đã tạo một mục trong tôi ~/.ssh/configvà thêm vàoPubkeyAuthentication no
Craig London

2
Không làm việc cho tôi.
Revierpost

11

Gần đây tôi cần điều này nhưng không có tùy chọn nào ở trên hoạt động, ssh -vcho thấy các tùy chọn dòng lệnh được chuyển qua công -otắc đã bị vượt quá bởi các giá trị được chỉ định trong ~/.ssh/configtệp của tôi .

Những gì đã làm việc này là:

ssh -F /dev/null <username>@<host>

Từ sshtrang người đàn ông:

 -F configfile
     Specifies an alternative per-user configuration file.  If a
     configuration file is given on the command line, the system-wide
     configuration file (/etc/ssh/ssh_config) will be ignored. The default 
     for the per-user configuration file is ~/.ssh/config.

Tín dụng cho câu trả lời này: Làm thế nào tôi có thể làm cho ssh bỏ qua .ssh / config?


1
Điều này không trả lời câu hỏi. Bạn luôn có thể có các khóa được lưu trữ trong tác nhân và cách tiếp cận của bạn sẽ không ngăn khách hàng sử dụng chúng.
Jakuje

Hừm, làm thế nào một người sẽ khắc phục vấn đề đó cũng như vấn đề tôi đã đề cập trong câu trả lời của mình?
adeelx

2
Ngoài ra nếu bạn có các phím ở vị trí tiêu chuẩn (như trong câu hỏi), chúng sẽ được sử dụng bất kể cấu hình có mặt hay không. Tôi sẽ đi với một trong những phương pháp được đề cập trong các câu trả lời đầu tiên.
Jakuje

Không hoàn toàn đúng, tôi chỉ thử nó trên LubFi 14.04 của mình và mặc dù tôi có các khóa của mình ở vị trí tiêu chuẩn ~/.ssh/config, các khóa không được sử dụng nếu tôi chỉ định -F /dev/null. ssh -vĐầu ra giúp trong trường hợp này, nó cho thấy rõ rằng vì tôi có một mục nhập bắt tất cả trong cấu hình ssh của mình *, nên nó chọn sử dụng khóa chung thay vì tôn trọng các tùy chọn được chuyển qua công -otắc như trong các câu trả lời trước.
adeelx

1
Vị trí tiêu chuẩn được ~/.ssh/id_rsanêu trong trang hướng dẫn. Những đường dẫn này được mã hóa cứng trong máy khách. Chỉ cần chắc chắn rằng bạn cung cấp người dùng chính xác khi thử nghiệm.
Jakuje

4

Tôi đã thử một vài trong số những câu trả lời này, nhưng ssh -vvẫn cho thấy các khóa công khai của tôi bị rút ra khỏi thư mục nhà. Tuy nhiên, việc chỉ định tệp nhận dạng không có thật đã lừa tôi:

ssh -i /dev/null host

Tôi phải thực hiện việc này vĩnh viễn (để khắc phục xung quanh máy chủ SSH bị hỏng trong PDU được gắn trên giá APC - tránh xa những điều này nếu bạn quan tâm đến bảo mật - vì vậy tôi đã kết thúc việc đưa tùy chọn vào tệp cấu hình của mình:

Host apc1 apc2
KexAlgorithms +diffie-hellman-group1-sha1
IdentityFile /dev/null

2

@scoopr và @Halil alzgür câu trả lời không hiệu quả với tôi.

Điều này làm việc cho tôi:

ssh -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no user@example.com

Nguồn: http://linuxcommando.blogspot.com/2008/10/how-to-disable-ssh-host-key-checking.html


13
Câu hỏi là về xác thực khách hàng bằng mật khẩu. Câu trả lời này là về việc kiểm tra xem khóa máy chủ có khớp với một trong các máy chủ đã biết hay không. Thực tế, nó đang trả lời một câu hỏi khác
Anigel

2

Và cũng chắc chắn, không có BatchMode=yeshoạt động trong .ssh / config. Nếu không, bạn không có cơ hội, để có được một dấu nhắc mật khẩu tương tác.


0

Tôi có thể là người duy nhất trên thế giới gặp vấn đề này, nhưng tôi đã có một sshhệ điều hành khác đang chạy (choco ssh trong Windows trong một vỏ Cygwin) được thấy quawhich ssh

Vì vậy, giải pháp là

 /usr/bin/ssh user@example.com

Lưu ý đường dẫn đầy đủ. Tôi đã làm điều này sau khi tôi đã chạycyg-get openssh

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.