如果公钥认证失败,如何使ssh失败而不是提示输入密码?


107

我有一个脚本,它使用公钥身份验证对多个服务器进行加密。由于配置问题,其中一台服务器已停止让脚本登录,这意味着该脚本被“ Password:”提示卡住,显然它无法回答,因此它甚至不尝试其余服务器在列表中。

有没有一种方法可以告诉ssh客户端,如果密钥身份验证失败,则不提示输入密码,而是仅报告连接错误并让我的脚本继续运行?

Answers:


138

对于OpenSSH,存在BatchMode,该模式除了禁用密码提示外,还应禁用查询密钥的密码短语。

批处理模式

如果设置为“是”,密码短语/密码查询将被禁用。此选项在没有用户提供密码的脚本和其他批处理作业中很有用。参数必须为“是”或“否”。默认为“否”。

用法示例:

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

这对我禁用了公共密钥身份验证。我指定了ssh user @ host -C somecommand。为我工作的唯一条件是ssh user@host -oPreferredAuthentications=publickey -C 'echo success'
AB卡罗尔

20

将以下内容添加到您的~/.ssh/config

PasswordAuthentication no

并在服务器上禁用密码身份验证,请在该行中添加同一行/etc/ssh/sshd_config并重新启动sshd


7
如果您不想禁用所有ssh客户端连接的密码身份验证,也可以在命令行上指定选项。在您的ssh命令中添加“ -oPasswordAuthentication = no”。
cas

7
这不会阻止输入密码提示。OP的脚本仍将挂起。
Joshua Swink 09年

11

如果您使用的是dropbear,只需添加“ -s”选项以禁用密码身份验证。


4
+1(不假设客户端为openssh :-)
cas

8

在(或~/.ssh/config)命令行上,您可以进行设置PreferredAuthentications

PreferredAuthentications=publickey

我认为,在命令行上,您需要将选项包装在引号中,然后将其传递给-o选项。
Craig Walker

3
@CraigWalker您也可以按原样通过它,即ssh -o PreferredAuthentications=publickey
Tobias Kienzler

@CraigWalker如果希望使用空格来分隔选项和值,则需要使用引号,例如ssh "-oPreferredAuthentications publickey"
Timo
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.