2

我将我的 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-authenticationNegotiate优于NTLM.

Negotiate所以对我来说,cURL在这种情况下似乎不起作用。(据我了解 MS 文档,如果 Kerberos 可用,连接应该首选 Kerberos,如果 Kerberos 不可用,则回退到 NTLM。)

问题:

  • 如何检查服务器端或我的本地 cURL 是否不支持 Kerberos。
  • 是否有一个选项可以强制 git 使用NTLM而不是Negotiate. (我在不同的 stackoverflow 文章中阅读了一些关于 HTTP/NTLM 代理的内容,但是当我尝试将 Git 存储库配置为 NTLM 代理时它不起作用——我真的没想到它会起作用。)
  • 解决问题或获取更多详细信息的任何其他想法是怎么回事?

非常感谢!

4

1 回答 1

0

如果您使用的是用户名和密码,那么您明确地没有使用 Kerberos。使用用户名和密码进行 HTTP 身份验证与 Kerberos 正交。

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

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

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

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

解决问题或获取更多详细信息的任何其他想法是怎么回事?

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

于 2019-01-14T11:59:23.357 回答