我将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-authentication,Negotiate
比NTLM
更为可取。
对于我来说,在这种情况下,cURL似乎不适用于Negotiate
。 (据我了解的MS文档,如果可以使用,则连接应首选Kerberos;如果不可用,则应使用NTLM。)
问题:
NTLM
而不是Negotiate
。 (我在不同的stackoverflow文章中读到了有关HTTP / NTLM代理的内容,但是当我尝试将Git存储库配置为NTLM代理时,它不起作用-我并不希望它能起作用。)非常感谢!
答案 0 :(得分:0)
如果您使用用户名和密码,则明确不使用Kerberos。使用用户名和密码进行HTTP身份验证与Kerberos正交。
如何检查服务器端或本地cURL是否不支持Kerberos。
运行klist -5fea
来查看您是否有Kerberos票证。如果是这样,您应该可以curl --negotiate
而无需指定用户名和密码; curl将使用您的Kerberos票证进行身份验证。如果您没有票证,则需要使用NTLM并使用用户名和密码,或使用个人访问令牌(PAT)。
是否有强制git使用NTLM而不是协商的选项。
是的,使用用户名和密码应该显式禁用协商。
还有其他解决问题或获得更多详细信息的想法吗?
设置GIT_CURL_VERBOSE=1
和GIT_TRACE=1
环境变量。