如何强制ssh客户端仅使用密码身份验证?


375

如果我使用来自例如:Ubuntu 11.04的pubkey auth,如何将ssh客户端设置为仅对服务器使用密码auth?(由于测试服务器上的密码才需要,我默认使用密钥登录)

我找到了一个方法:

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

现在提示输入密码,但是有什么正式方法吗?

Answers:


578

我最近也需要这个,并想出了这个:

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

您需要确保未将客户端配置为禁止密码身份验证。


4
我需要强制密码提示出现在使用Kerberos进行自动身份验证的环境中,并且在该特定情况下类似的命令对我ssh -o GSSAPIAuthentication=no example.com
有用

21
真好 -o PubkeyAuthentication=no就我而言,仅此而已。
mivk

10
ssh变成朋友的osx笔记本电脑,我不得不使用:-o PreferredAuthentications=keyboard-interactive -o PubkeyAuthentication=no 相反
guido

4
这对我不起作用。它一直在说:权限被拒绝(公钥)。并且从不提供密码提示。
reinierpost

7
@reinierpost可能是因为ssh 主机已禁用PasswordAuthentication。实际上,我在这里是因为我想测试禁用密码身份验证在主机上是否正常工作。
RubberDuck

168

我发现了用于此目的的快捷方式:

ssh user:@example.com

注意冒号(:)及其后的空密码。


2
尚无文档。实际上,我浏览了OpenSSH源代码无济于事(它的解析阶段相当隐秘,今天上午是:)。我最初的动机:如果您输入空密码,许多客户会提示输入密码,例如mysql -u user -p
HalilÖzgür2014年

43
这似乎不再起作用,至少在我看来,这是行不通的。ssh客户端盲目地尝试不相关的私钥以对新安装的服务器进行身份验证,并且由于尝试次数最多而无需询问密码,因此被拒绝了。为了对此第一个连接强制密码验证,我必须使用-o PreferredAuthentications=password语法,冒号技巧没有明显的作用。因此,尽管可以尝试这种技巧,但不应将其作为一致的行为。
WhiteWinterWolf 2015年

2
@HalilÖzgür:不幸的消息,记住和输入容易得多;)!
WhiteWinterWolf

3
正如WhiteWinterWolf所说的@Qualcuno,不幸的是,它不再在某些平台上可用。
HalilÖzgür16年

2
确保您的ssh_config文件上没有PasswordAuthentication no!
Braiam '18

32

与scoopr发布的方法一样,您可以在ssh客户端配置文件中设置每个主机选项。

.ssh目录中,创建一个名为的文件config(如果尚不存在),并将权限设置为600,则可以创建以以下内容开头的部分

host <some hostname or pattern>

然后设置每个主机的选项,例如,

host bob.specific.foo
user fred

host *.home.example
user billy
port 9191

这样你就可以

host server.to.test
PubkeyAuthentication=no

在那个文件中,然后简单地

ssh server.to.test

然后该选件将被拿起。


感谢您的回答。我创建了我的一个条目~/.ssh/config,并添加PubkeyAuthentication no
克雷格·伦敦

2
对我不起作用。
reinierpost

11

我最近需要这个,但是上面的选项都不起作用,这ssh -v表明通过-o开关传递的命令行选项被~/.ssh/config文件中指定的值所覆盖。

起作用的是:

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

ssh手册页:

 -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.

感谢此答案:如何使ssh忽略.ssh / config?


1
这不能回答问题。您始终可以将密钥存储在代理中,并且您的方法不会阻止客户端使用它们。
雅库耶

嗯,一个人如何纠正这个问题以及我在回答中提到的那个问题?
adeelx

2
另外,如果您将密钥放在标准位置(如在问题中所示),则无论配置是否存在,都将使用它们。我将使用第一个答案中提到的方法之一。
雅库耶

不太正确,我只是在Lubuntu 14.04上对其进行了测试,即使我将密钥放在标准位置~/.ssh/config,但如果指定,密钥也不会被使用-F /dev/nullssh -v输出在这种情况下会有所帮助,它清楚地表明,因为我在ssh config中有一个包罗万象的条目*,所以它选择使用公钥,而不是-o像以前的答案那样使用通过开关传递的选项。
adeelx

1
标准位置~/.ssh/id_rsa如手册页所述。这些路径在客户端中进行了硬编码。只需确保在测试时提供正确的用户即可。
雅库耶

4

我尝试了其中的一些答案,但ssh -v一直显示我的公钥已从主目录中拉出。但是,指定伪造的身份文件对我有用:

ssh -i /dev/null host

我要永久(解决在APC机架式PDU破SSH服务器做到这一点-保持远离这些东西,如果你对安全性-所以我最终把选择到我的配置文件:

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


2

还要确保,BatchMode=yes.ssh / config中没有活动的。否则,您将没有机会获得交互式密码提示。


0

我可能是世界上唯一一个遇到此问题的人,但是通过以下方式我ssh正在运行另一个操作系统(在Windows的cygwin shell中为choco ssh)which ssh

所以解决方案是

 /usr/bin/ssh user@example.com

注意完整路径。我跑步后就这样做了cyg-get openssh

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.