git“致命:'http:...'身份验证失败”,来自Microsoft Visual Studio Team Foundation Server

时间:2019-01-14 11:46:32

标签: git ubuntu tfs http-negotiate

我将Ubuntu升级到18.10(从17.10)。现在,我无法再通过CLI连接到项目的Microsoft Visual Studio Team Foundation Server(版本16.131.27701.1)。 (我已经两周没有在存储库上工作了。所以我也不知道服务器端在此期间是否也发生了变化。)

$ git fetch
Username for 'http://....net:8080': NUNNI
Password for 'http://NUNNI@....net:8080': 
fatal: Authentication failed for 'http://....net:8080/tfs/AE/_git/AE-VMT/'

(是的,它不是HTTPS,而是通过某些VPN。)

不幸的是,我找不到适合我情况的有用答案。

一些研究表明:

$ GIT_CURL_VERBOSE=2 git fetch
...
< WWW-Authenticate: Bearer
< WWW-Authenticate: Negotiate
< WWW-Authenticate: NTLM
...

因此,似乎通过HTTP标头宣布了协商(Kerberos或NTLM)或NTLM进行身份验证。

curl --negotiate "http://NUNNI:<password>@....net:8080/tfs/AE/_git/AE-VMT"

不起作用; HTML标题元素是:

TF400813: Resource not available for anonymous access. Client authentication required. - Microsoft Team Foundation Server

curl --ntlm "http://NUNNI:<password>@....net:8080/tfs/AE/_git/AE-VMT"

工作正常。

据我所知https://docs.microsoft.com/en-us/dotnet/framework/wcf/feature-details/understanding-http-authenticationNegotiateNTLM更为可取。

对于我来说,在这种情况下,cURL似乎不适用于Negotiate。 (据我了解的MS文档,如果可以使用,则连接应首选Kerberos;如果不可用,则应使用NTLM。)

问题:

  • 如何检查服务器端或本地cURL是否不支持Kerberos。
  • 是否可以选择强制git使用NTLM而不是Negotiate。 (我在不同的stackoverflow文章中读到了有关HTTP / NTLM代理的内容,但是当我尝试将Git存储库配置为NTLM代理时,它不起作用-我并不希望它能起作用。)
  • 还有其他解决问题或获得更多详细信息的想法吗?

非常感谢!

1 个答案:

答案 0 :(得分:0)

如果您使用用户名和密码,则明确使用Kerberos。使用用户名和密码进行HTTP身份验证与Kerberos正交。

  

如何检查服务器端或本地cURL是否不支持Kerberos。

运行klist -5fea来查看您是否有Kerberos票证。如果是这样,您应该可以curl --negotiate 而无需指定用户名和密码; curl将使用您的Kerberos票证进行身份验证。如果您没有票证,则需要使用NTLM并使用用户名和密码,或使用个人访问令牌(PAT)。

  

是否有强制git使用NTLM而不是协商的选项。

是的,使用用户名和密码应该显式禁用协商。

  

还有其他解决问题或获得更多详细信息的想法吗?

设置GIT_CURL_VERBOSE=1GIT_TRACE=1环境变量。