如果我使用例如来自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


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

#1 楼

我最近也需要这个,并提出了这个建议:

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


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

评论


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

–IllvilJa
13年8月13日在10:56



真好在我的情况下,仅-o PubkeyAuthentication = no就足够了。

– mivk
16年4月4日在10:04

要将SSH转换为朋友osx笔记本电脑,我必须使用:-o PreferredAuthentications = keyboard-interactive -o PubkeyAuthentication = no代替

– Guido
16-09-17在15:23

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

– reinierpost
18年7月27日在12:18

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

–RubberDuck
18年9月8日在14:39

#2 楼

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

ssh user:@example.com


注意冒号(:)和后面的空密码。

评论


这是在某处记录的吗?

– Faheem Mitha
14年4月13日在22:23

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

–HalilÖzgür
2014年4月14日在2:38

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

–WhiteWinterWolf
2015年6月13日在6:26



正如WhiteWinterWolf所说的@Qualcuno,不幸的是,它不再在某些平台上可用。

–HalilÖzgür
16年1月17日在23:04

确保您的ssh_config文件上没有PasswordAuthentication no!

–脑袋
18年7月29日在22:43

#3 楼

除了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

–克雷格·伦敦
18年6月21日在13:55



对我不起作用。

– reinierpost
18年7月27日在12:19

这解决了我的问题。

–乔纳森·克罗斯(Jonathan Cross)
3月31日10:45

配置实际上需要是PubkeyAuthentication,请注意,〜/ .ssh / config文件中不需要=符号

–卡尔帕克·加德雷
8月8日晚上11:53

这就是今天终于奏效的东西!在其他选项上花费了太多时间。我认为部分原因是我的服务器较旧且受诅咒😂,而且我也不知道过去如何设置它,因为它似乎不想遵守服务器上的authorized_keys中的任何内容。

– CTS_AE
11月6日20:49

#4 楼

我最近需要此功能,但以上所有选项均不起作用,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?

评论


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

–贾库耶
16年1月22日在15:46

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

–adeelx
16年1月22日在15:49

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

–贾库耶
16年1月22日在15:54

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

–adeelx
16年1月22日在15:58

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

–贾库耶
16年1月22日在16:02

#5 楼

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

ssh -i /dev/null host


我必须永久执行此操作(以解决APC机架安装式SSH服务器损坏的问题PDU —如果您关心安全性,请远离这些东西—因此我最终将该选项放入了我的配置文件中:

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


#6 楼

另外,请确保.ssh / config中没有激活BatchMode=yes
否则,您将没有机会获得交互式密码提示。

#7 楼

@scoopr和@HalilÖzgür的答案对我不起作用。

这对我有用:

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


来源:http:// linuxcommando.blogspot.com/2008/10/how-to-disable-ssh-host-key-checking.html

评论


问题是关于通过密码进行客户端身份验证。该答案是关于检查服务器主机密钥是否与已知主机中的一个匹配。实际上,它回答了一个不同的问题

–阿尼格尔
2015年9月3日于10:48

#8 楼

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

,因此解决方案是

 /usr/bin/ssh user@example.com


注意完整路径。我在运行cyg-get openssh之后执行了此操作

#9 楼

上面的评论中提到了此问题,但我认为它应该作为自己的答案。要更改此设置,您需要进入服务器(许多服务将允许您通过其管理控制台上的虚拟控制台使用密码进行访问)并:


Permission denied (publickey)


找到nano /etc/ssh/sshd_config并将其更改为PasswordAuthentication no,然后取消注释。


运行yes


现在尝试登录使用上面的方法之一从远程服务器输入,例如sudo service sshd restart