我正在编写一个可以选择克隆存储库的构建脚本,我希望它只在当前用户是访问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:Users
PreferredAuthentications publickey
PasswordAuthentication no
下次当你试图访问你没有访问权限的仓库时,它会优雅地失败。