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

是否可以告诉ssh客户端如果密钥认证失败则不要提示输入密码,而是报告一个错误连接并让我的脚本继续运行?

评论

老实说,最好将您的内容移植到Ansible :)一旦做出切换,就再也不会回头了。

#1 楼

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


BatchMode


如果设置为“是”,则将禁用密码短语/密码查询。参数必须为
“是”或“否”。默认值为“否”。



示例用法:

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


评论


这对我禁用了公共密钥身份验证。我指定了ssh user @ host -C somecommand。对我有用的只是ssh user @ host -oPreferredAuthentications = publickey -C'echo success'

– A.B.卡罗尔
19-09-3在7:33

#2 楼



要禁用当前ssh连接尝试的密码身份验证,请在命令行中传递此选项:将来与任何主机的所有连接的密码验证都将以下内容添加到您的~/.ssh/config中: /.ssh/config:

-o PasswordAuthentication=no



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

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

评论


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

–cas
09年9月3日在11:23

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

–约书亚·斯威克(Joshua Swink)
09年11月4日在20:02

@JoshuaSwink:是的。我刚刚尝试了它(在命令行上以-oPasswordAuthentication = no出现。您遇到诸如权限被拒绝(公共密钥,密码)之类的错误,并且它立即退出。

– Timmmm
19年12月18日在16:53

#3 楼

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

评论


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

–cas
09年9月3日在11:55

#4 楼

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

PreferredAuthentications=publickey


评论


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

–克雷格·沃克(Craig Walker)
2009年9月11日下午1:20

@CraigWalker您也可以按原样传递它,即ssh -o PreferredAuthentications = publickey

– Tobias Kienzler
13-10-29在13:33

@CraigWalker如果您希望使用空格分隔选项和值,则需要用引号引起来。 ssh“ -oPreferredAuthentications publickey”

– Timo
18年3月14日在12:02

#5 楼

这是一个示例sftp bash脚本代码段。如果出现故障,我正在使用“ -o BatchMode = Yes”禁用密码提示。并检查frp返回码以检查ftp连接是否失败。
sftp -o "IdentityFile=<YOUR_IDENTTIY_FILE>"  -o "BatchMode=Yes" userName@ftpserver.com <<EOF

cd /$remotepath
mget *.csv $localpath/download

quit
EOF
exit_code=$?
if [[ $exit_code != 0 ]]; then
   echo "sftp error, failed to connect to ftp server" >&2
   exit 1
fi


评论


只是想将BatchMode设置为yes是禁用交互式身份验证(即密码提示)的原因。

–鲁本
20年6月19日在3:44