【发布时间】:2011-06-30 22:23:57
【问题描述】:
我正在尝试从需要 NTLM 身份验证的代理后面的 Windows 计算机访问 Github 上的存储库。 SSH 和 git:// 协议都不能直接使用,所以我试图通过代理使用 HTTPS。
在 NTLM proxy without password? 的帮助下,我已经能够使 msysgit 提供的 curl 二进制文件与代理配合得很好:
curl -U : --proxy-ntlm --proxy xxx.xxx.xx.xx:8080 https://github.com
这样成功,返回Github主页。
但是,我发现 2010 年 2 月 Proxying Git 的一篇文章指出(强调我的):
不幸的是,curl 似乎总是对代理使用基本身份验证。如果您的代理需要其他东西,也许 Windows 网络的 NTLM,那么您遇到了问题。 curl 用于处理所有 http 传输详细信息,它确实支持 NTLM 身份验证方法,但我知道没有任何方法可以将必要的选项传递给 curl。 Git 通过其库绑定使用 curl,因此仅用包装脚本替换 curl 可执行文件是不够的。
我知道 Git 配置中的 core.gitproxy 选项,但这似乎只适用于 git:// 协议。同样,http.proxy 选项设置代理的地址,但无法为 curl 提供适当的选项。
【问题讨论】:
-
我认为文章中的评论毫无意义。 curl 使用 libcurl 库,它实现了对 NTLM 的支持。 git 是否支持 libcurl 提供的这种功能是另一回事。
-
顺便说一句,您可以尝试使用 iptables 将请求重定向到
github.com到您自己的计算机,并使其充当透明代理,然后使用适当的身份验证转发到 NTLM 代理。但是到了这个时候,设置一个 VPN 并通过它将流量路由到 github.com 会更容易。 -
@Artefacto:是的,我知道 git 和 curl 都使用 libcurl,但问题是如何通过 git 将所需的 NTLM 相关选项传递给 libcurl。此外,iptables 是完全不可能的,因为 (a) 客户端机器是 Windows,并且 (b) 本地管理员访问权限不可用。
-
我认为这只是将
curl_easy_setopt(handle, CURLOPT_PROXYAUTH, CURLAUTH_NTLM)与代理身份验证的其他常用选项(CURLOPT_PROXY、CURLOPT_PROXY_TYPE和CURLOPT_PROXYUSERPWD)一起使用的问题。