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


我有一个脚本,使用公钥认证ssh'es几个服务器。其中一台服务器由于配置问题而停止让脚本登录,这意味着脚本卡住了“密码:”提示,显然无法回答,所以它甚至没有尝试其余的服务器在列表中。

如果密钥验证失败,有没有办法告诉ssh客户端不提示输入密码,而只是报告连接错误并让我的脚本继续运行?


91
2017-09-03 10:58






答案:


对于OpenSSH,还有BatchMode,除了禁用密码提示之外,还应禁用查询密钥的密码短语。

批处理模式

如果设置为“yes”,则将禁用密码/密码查询。     此选项在脚本和其他没有的批处理作业中很有用     用户在场提供密码。争论必须是     “是还是不是”。默认值为“no”。

样品用法:

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

120
2017-09-03 12:09





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

PasswordAuthentication no

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


12
2017-09-03 11:19



如果您不想为所有ssh客户端连接禁用密码身份验证,则还可以在命令行上指定选项。在您的ssh命令中添加'-oPasswordAuthentication = no'。 - cas
这不会阻止密码提示。 OP的脚本仍然会挂起。 - Joshua Swink


如果你使用dropbear,只需添加“-s“禁用密码验证的选项。


9
2017-09-03 11:54



+1假设客户端是openssh :-) - cas


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

PreferredAuthentications=publickey

6
2017-09-03 11:39



我认为,在命令行中,您需要将选项包装在引号中,然后将其传递给-o选项。 - Craig Walker
@CraigWalker您也可以按原样传递,即 ssh -o PreferredAuthentications=publickey - Tobias Kienzler
@CraigWalker如果您希望使用空格来分隔选项和值,则需要引号,例如 ssh "-oPreferredAuthentications publickey" - Timo