如何使GIT和/或SSH优雅地失败,并且在密钥或其他失败时不要求密码身份验证



我正在编写一个可以选择克隆存储库的构建脚本,我希望它只在当前用户是访问git存储库的有效用户时才这样做(即:可以使用有效的ssh密钥登录私有git托管帐户,而不是让它要求密码并等待)

因此构建脚本只会向控制台发出警告消息,而不会克隆或构建用户无法访问的私有部分。

我可以先尝试ssh来检测user:host是否有效,但也不希望它在尝试连接时询问并等待用户或密码,但在这种情况下,我可以在脚本中检测到失败的方式。(stderr或stdout输出)指定只使用一个键?

您可以使用ssh -nT <host>来测试到服务器的SSH连接。当然,只是这样,就会提示输入密码。

  • -T禁用tty分配,因此它只是将您扔到原始连接
  • -n禁用stdin,所以你真的不与主机交互。

可以关闭-o PasswordAuthentication=no的密码鉴权。完整命令为:

ssh -nT -o PasswordAuthentication=no <host>

然后检查这个的退出码。如果您不想将任何内容打印到标准输出,您可以添加-q(安静模式)。

所有这些都需要用户建立一个工作的ssh连接(以及相应的.ssh/config文件)。Afaik,没有办法接受预配置的密码,但没有交互式密码提示符显示。

[ssh docs] [related askUbuntu question]

要在没有用户干预的情况下测试ssh连接,您可以尝试BatchMode。设置后,禁用密码认证。看到ssh_config (5)获取详细信息。-E选项允许记录错误日志。使用/dev/null忽视。如果连接成功,发送一个bash noop命令:来运行。

ssh -o BatchMode=yes -E /dev/null user@example.com : && 
echo 'good to go' || echo 'failed'

在你的C:UsersSSH文件夹你可以创建一个名为"config"并添加以下内容并保存。

PreferredAuthentications publickey
PasswordAuthentication no

下次当你试图访问你没有访问权限的仓库时,它会优雅地失败。

相关内容