Git 吉特;致命:对';的身份验证失败;http:…'&引用;从微软VisualStudio Team Foundation服务器

Git 吉特;致命:对';的身份验证失败;http:…'&引用;从微软VisualStudio Team Foundation服务器,git,ubuntu,tfs,http-negotiate,Git,Ubuntu,Tfs,Http Negotiate,我把Ubuntu升级到了18.10(从17.10)。现在,我不能连接到我的项目的微软VisualStudio Team Foundation Server(版本16.131.27 701.1)从CLI更多。(我已经两周没有在存储库上工作了。所以我不知道在此期间服务器端是否也发生了变化。) (是的,它不是HTTPS,而是通过VPN实现的。) 不幸的是,我没能找到一个对我的处境有帮助的答案 一些研究表明: $ GIT_CURL_VERBOSE=2 git fetch ... < WWW-Aut

我把Ubuntu升级到了18.10(从17.10)。现在,我不能连接到我的项目的微软VisualStudio Team Foundation Server(版本16.131.27 701.1)从CLI更多。(我已经两周没有在存储库上工作了。所以我不知道在此期间服务器端是否也发生了变化。)

(是的,它不是HTTPS,而是通过VPN实现的。)

不幸的是,我没能找到一个对我的处境有帮助的答案

一些研究表明:

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

curl --ntlm "http://NUNNI:<password>@....net:8080/tfs/AE/_git/AE-VMT"
curl--ntlm”http://NUNNI:@…净:8080/tfs/AE/_git/AE-VMT”
很好

据我所知,
协商
优于
NTLM

所以对我来说,在这种情况下,cURL似乎不适合
协商。(据我对MS文档的理解,如果Kerberos可用,则连接应首选Kerberos,如果Kerberos不可用,则返回NTLM。)

问题:

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

非常感谢

如果您使用的是用户名和密码,那么显然不是使用Kerberos。使用用户名和密码进行HTTP身份验证与Kerberos是正交的

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

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

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

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

还有其他解决问题或获取更多详细信息的方法吗


设置
GIT\u CURL\u VERBOSE=1
GIT\u TRACE=1
环境变量。

谢谢您的回答。此外,我还发现,我错过了HTTP头中宣布的基本身份验证。cURL只在我添加--ntlm作为选项时起作用。否则,它将尝试使用返回身份验证错误的BASIC。不,我试图说服我的客户解决这个问题-(是的,我看到过这方面的报道。我认为Basic只支持个人访问令牌,而NTLM只支持域用户。我……实际上不知道如何解决这个问题。
curl --negotiate "http://NUNNI:<password>@....net:8080/tfs/AE/_git/AE-VMT"
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"