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

rjm*_*nro 131 ssh authentication public-key

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

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

Kje*_*sen 165

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

批处理模式

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

示例用法:

ssh -oBatchMode=yes -l <user> <host> <dostuff>
Run Code Online (Sandbox Code Playgroud)

  • 这对我来说禁用了公钥身份验证。但是,我指定为 ssh user@host -C somecommand。对我有用的只是`ssh user@host -oPreferredAuthentications=publickey -C 'echo success'` (3认同)

cas*_*cas 36

以上选项适用于传出ssh 连接,即您尝试连接到远程 ssh 服务器的位置。

SSH服务器(即适用于所有在禁用密码验证传入的SSH连接),加入PasswordAuthentication no/etc/ssh/sshd_config和重新启动sshd

  • 这不会阻止密码提示。OP 的脚本仍然会挂起。 (9认同)
  • 如果您不想为所有 ssh 客户端连接禁用密码身份验证,您还可以在命令行上指定选项。将“-oPasswordAuthentication=no”添加到您的 ssh 命令中。 (8认同)
  • @JoshuaSwink:是的。我刚刚试过了(在命令行上作为`-oPasswordAuthentication=no`。你得到一个类似“权限被拒绝(公钥,密码)”的错误,它立即退出。 (2认同)

syb*_*eon 12

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

  • +1 不假设客户端是 openssh :-) (4认同)

Ama*_*rus 9

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

PreferredAuthentications=publickey
Run Code Online (Sandbox Code Playgroud)

  • @CraigWalker 您也可以按原样传递它,即`ssh -o PreferredAuthentications=publickey` (5认同)