【问题标题】:Git through digest proxy authenticationGit 通过摘要代理认证
【发布时间】:2010-01-18 18:10:13
【问题描述】:

我想通过代理服务器进行“git clone”。问题是我的代理服务器使用摘要身份验证。所以我既不能在 git 文档中找到,也不能帮助那个已经做过的人。

我翻遍了谷歌搜索,但找不到任何有用的结果。

谢谢。

【问题讨论】:

    标签: git proxy


    【解决方案1】:

    只是为了节省在谷歌上搜索 Bennet 的答案的时间:

    1. 清除旧设置:
      >git config --global --unset https.proxy
      >git config --global --unset http.proxy
    2. 设置新设置:
      >git config --global https.proxy https://USER:PWD@proxy.whatever:80
      >git config --global http.proxy http://USER:PWD@proxy.whatever:80

    3. 验证新设置:
      >git config --get https.proxy
      >git config --get http.proxy

    注意:当您验证时,您应该会看到您输入的相同值。

    【讨论】:

      【解决方案2】:

      通过将环境变量 http_proxy 设置为 http://username:password@proxyhost:80,我能够通过经过身份验证的代理进行 git 克隆

      然后一个普通的 ole git clone 起作用了。

      (代理是一些公司的 Windows 东西,所以我的用户名实际上看起来像域\用户名。花了一段时间才意识到我需要域。)

      【讨论】:

      • 甜蜜 - 对我来说是一种享受。感谢您为我解决了这个长期存在的问题:)
      • 如果用户名包含 \ 和 . ?
      • 没问题。正如我所提到的,我的用户名包含一个反斜杠。
      • 也为我工作,但是...如果您从 https 存储库克隆,请设置环境变量“https_proxy”而不是 /。
      【解决方案3】:

      请注意,自 Git 1.7.10, Apr. 2012, commit dd61399 以来,Git 确实支持 http 代理。

      但是,假设您安装了 curl 7.10.7+,这是 Git 在 Git 2.3.2+(2015 年第一季度)之前没有检查的内容

      这是由Tom G. Christensen (tgc)commit 1c2dbf2 修复的

      http: 支持 curl

      Commit dd61399 引入了对需要身份验证的 http 代理的支持,但它依赖于 CURL_PROXYAUTH 选项,该选项是 在 curl 7.10.7 中添加。
      这确保只有在 libcurl 支持时才启用代理身份验证。

      【讨论】:

        【解决方案4】:

        使用

        git config --global http.proxy

        或者更一般地说, 如果用户或密码有任何特殊字符,如“$\”等,你必须对其进行 url 编码,然后类似于:%24%5C

        希望这会有所帮助,因为我通常对此很生气......

        【讨论】:

          【解决方案5】:

          Git 似乎不支持经过身份验证的代理服务器。可以查看http.c from the git.git repository;为了完全支持经过身份验证的代理服务器,它必须设置 CURL_PROXYUSERPWD 来设置用户名和密码,但该字符串不会出现在该文件中。

          一种可能的解决方案是修复 Git;在http.c 中添加一些配置参数,例如http.proxyuserhttp.proxypass,用于设置代理的用户名和密码,http.proxyauth 用于设置认证方式,然后将它们作为适当的@传入987654323@.

          如果您不想破解 Git 源代码,您可以设置自己的本地代理服务器,无需身份验证,然后从该代理服务器转发到需要身份验证的代理服务器。 Squid支持this mode of operation,虽然配置可能有点复杂;我发现 an example configuration 声称要演示此设置,但我自己尚未验证它是否有效。

          编辑:没关系,在检查Squid source code 之后,它似乎只支持基本身份验证,而不支持摘要身份验证,将请求转发给对等点:

          httpHeaderPutStrf(hdr_out, header, "Basic %s", base64_encode(orig_request->peer_login));
          

          我还没有找到任何代理服务器可以将请求传递给另一个启用了摘要身份验证的代理;如果你能找到一个支持上游代理的摘要身份验证,我建议使用它。

          否则,我建议使用与 HTTP 不同的协议;如果您需要身份验证,请使用 ssh:,如果您只是从公共服务器上拉下更改,请使用原始的 git: 协议。

          【讨论】:

          • 是的,我建议您将 Squid 设置为本地代理服务器(在运行 Git 的同一台机器上),无需身份验证,并让 Squid 连接到具有验证。然后只需将 Git 配置为使用本地 Squid 作为其代理服务器。
          • 非常感谢您(试图达到 15 个字符)。
          • 对不起,我意识到 Squid 不支持这种用法;它只支持上游代理的基本身份验证,不支持摘要。添加了更多建议。
          • 您是否已将补丁发送到上游?如果可以的话,我会推荐它。
          【解决方案6】:

          如果您通过 SSH 进行克隆,则密切相关的问题 How do I use GitHub through harsh proxies? 的答案看起来适合您的情况,但不要使用尚不支持摘要式身份验证的 Corkscrew,而是使用来自 CPAN 的 tunnel-auth.pl

          【讨论】:

            猜你喜欢
            • 2012-07-18
            • 2015-01-04
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2022-12-24
            • 1970-01-01
            • 2018-03-02
            相关资源
            最近更新 更多