我将我的 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
.
Negotiate
所以对我来说,cURL在这种情况下似乎不起作用。(据我了解 MS 文档,如果 Kerberos 可用,连接应该首选 Kerberos,如果 Kerberos 不可用,则回退到 NTLM。)
问题:
- 如何检查服务器端或我的本地 cURL 是否不支持 Kerberos。
- 是否有一个选项可以强制 git 使用
NTLM
而不是Negotiate
. (我在不同的 stackoverflow 文章中阅读了一些关于 HTTP/NTLM 代理的内容,但是当我尝试将 Git 存储库配置为 NTLM 代理时它不起作用——我真的没想到它会起作用。) - 解决问题或获取更多详细信息的任何其他想法是怎么回事?
非常感谢!