it-swarm.cn

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

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

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

110
rjmunro

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

批处理模式

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

用法示例:

ssh -oBatchMode=yes -l <user> <Host> <dostuff>
145
Kjetil Joergensen
  • 要为当前的ssh连接尝试禁用密码身份验证,请在命令行中传递此选项:

    -o PasswordAuthentication=no
    
  • 要为以后与任何主机的所有连接禁用密码身份验证,请将以下内容添加到您的~/.ssh/config

    PasswordAuthentication no
    
  • 要仅对某些主机禁用它,请将以下内容添加到〜/ .ssh/config中:

    Host host1 Host2 Host3...
        PasswordAuthentication no
    

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

要在SSH服务器上禁用密码身份验证(即适用于所有传入 ssh连接),请添加PasswordAuthentication no/etc/ssh/sshd_config,然后重新启动sshd

24
cas

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

12
sybreon

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

PreferredAuthentications=publickey
8
Rory