GitHub Windows客户端代理

时间:2013-04-22 17:47:12

标签: github proxy github-for-windows

我正在尝试让Windows的GitHub客户端工作。我在公司代理和防火墙后面的企业Win 7 x64计算机上。通过各种其他帖子并尝试环境变量和配置变量的多种组合,我发现克隆和推送更新工作的唯一方法是使用HTTPS_PROXY环境变量,包括我的完整公司域用户ID和密码。

从安全角度来看,这是不可接受的。还有其他方法可以让它发挥作用吗?

附加说明:

以下工作:

  • 添加名为HTTPS_PROXY的环境变量,其值为http://[domain]\[userid]:[password]@someproxy.mycorp.com:8080

以下工作:

  • HTTPS_PROXY变量
  • 中删除用户ID和密码
  • 使用名为HTTP_PROXY(无S
  • 的环境变量
  • http.proxy变量添加到全局配置文件(.gitconfig
  • https.proxy变量添加到全局配置文件

在所有情况下,GitHub 客户端仍然无法识别代理:文件TheLog.txt 始终的内容在启动时显示以下内容:

[time]|INFO|thread:4|GitHub.Helpers.StartupLogger|Proxy information: (None)
[time]|INFO|thread:4|GitHub.Helpers.StartupLogger|Couldn't fetch creds for proxy

然后输出几次失败的代理身份验证尝试,所有这些都表示“缺少证书。”

10 个答案:

答案 0 :(得分:128)

将这些条目添加到用户目录中的“.gitconfig”文件中(转到%USERPROFILE%):

[http]
    proxy = http://<proxy address>:<proxy port>

[https]
    proxy = https://<proxy address>:<proxy port>

如果您不想以明文形式存储密码,我会使用像CNTLM这样的本地代理转发器,它允许您引导所有流量并存储密码哈希。


与原始问题不同,如果您不在乎密码是否为明文,请添加以下内容:

[http]
    proxy = http://<username>:<password>@<proxy address>:<proxy port>

[https]
    proxy = https://<username>:<password>@<proxy address>:<proxy port>

答案 1 :(得分:14)

尝试了上述所有事情 - 但没有成功,只有帮助我的是CNTLM - http://cntlm.sourceforge.net/

安装它并运行cntlm -H,而不是对corp proxy进行身份验证,使用cntlm的输出编辑cntlm.ini文件,重新启动Windows服务。使用以下命令更新.gitconfig:

[https] proxy = localhost:3128
[http] proxy = localhost:3128

现在cntlm将执行所有身份验证,并且您将能够在corp代理后面使用GitHub(和Dropbox,btw)。至少直到下一次密码更改:)(比再次做cntlm -H的东西)

答案 2 :(得分:8)

我能够让GitHub Shell与我们的公司代理一起工作。我正在启动GitHub Shell并执行以下命令:

export http_proxy=http://<username>:<password>@<corporate proxy>:3128

我真的想让GUI工作。但我不想设置包含公司凭据信息的Windows全局环境变量。

奇怪的是GitHub GUI客户端能够连接到GitHub进行用户身份验证,但唯一的问题是从GitHub克隆,拉动和推送项目。好像是git实现的问题。我能够配置git来运行我们的代理而不将我的凭据放在git全局设置中,并且它在执行pull或push请求时要求我的凭据。但这只适用于Git Shell。

答案 3 :(得分:7)

如果您在企业中使用GitHub for Windows,那么您可能会面临一个糟糕的企业防火墙/代理。 GitHub for Windows在其GUI中还没有用于设置选项的代理参数。

要将GitHub for Windows配置为使用公司代理,请编辑通常位于C:\ Users \ .gitconfig或C:\ Documents&amp;中的.gitconfig文件。设置\的.gitconfig

关闭GitHub for Windows;在.gitconfig中,只需添加

[HTTPS] proxy = proxy.yourcompany.com:port

答案 4 :(得分:4)

我也遇到过这个问题,并试图深入研究它(反汇编客户端)。

生成我们看到的日志消息的代码如下:

private static void LogProxyServerConfiguration()
{
    WebProxy defaultProxy = WebProxy.GetDefaultProxy();
    string str = defaultProxy.Address != (Uri)null ? defaultProxy.Address.ToString() : "(None)";
    StartupLogger.log.Info((IFormatProvider)CultureInfo.InvariantCulture, "Proxy information: {0}", str);
    try
    {
        if (defaultProxy.Credentials == null)
        {
            StartupLogger.log.Info((IFormatProvider)CultureInfo.InvariantCulture, "Couldn't fetch creds for proxy", new object[0]);
        }
        else
        {
            NetworkCredential credential = defaultProxy.Credentials.GetCredential(GitHubClient.GitHubDotComUri, "Basic");
            StartupLogger.log.Info((IFormatProvider)CultureInfo.InvariantCulture, "Proxy is authenticated: {0}", credential != null && !string.IsNullOrWhiteSpace(credential.UserName));
        }
    }
    catch (Exception ex)
    {
        StartupLogger.log.InfoException("Couldn't fetch creds for proxy", ex);
    }
}

因此,此块仅记录在IE 中设置的代理信息。日志消息似乎与我们在配置文件或环境变量中设置的内容无关。

答案 5 :(得分:3)

我不知道您的防火墙,但我的校园使用代理

你使用任何git gui吗? 编辑:刚刚注意到您正在使用github客户端进行Windows

我正在使用tortoisegit,它很容易设置代理。只需右键单击任意位置,tortoisegit&gt;网络,启用代理服务器并设置服务器地址,用户名和密码。完成

据我所知,tortoisegit也可以与github一起开箱即用。

答案 6 :(得分:2)

以下是在github中设置代理的方法

git config --global http.proxy http://<username>:<pass>@<ip>:<port>
git config --global https.proxy http://<username>:<pass>@<ip>:<port>

在我的大学里,我们没有用户名和密码,所以如果我们的大学 ip是172.16.10.10和 港口是8080

git config --global http.proxy http://172.16.10.10:8080
git config --global https.proxy http://172.16.10.10:8080

P.S - &gt;我建议使用这种方法来设置代理,因为你会进一步了解事情 Source

答案 7 :(得分:1)

我发现this blog很有用。它描述了ntlmaps代理。它可能不太安全,但工作顺利。我无法让cntlm工作。

答案 8 :(得分:1)

对我们来说,解决方案涉及两个不同的事情。首先,如Sogger的回答所述,您需要将条目添加到位于.gitconfig的{​​{1}}文件中。

%USERPROFILE%

其次,(这对我们而言是缺失的部分),您需要在代理服务器上配置一个例外,以允许 未经过身份验证的 代理流量到{{ 1}}

在iPrism中,它看起来像这样: enter image description here

问题不在于代理,而在于身份验证。绕过身份验证要求允许所需的通信使用GitHub桌面客户端克隆和使用项目。

另请注意,此方法不需要在[http] proxy = http://<proxy address>:<proxy port> [https] proxy = https://<proxy address>:<proxy port> 文件中存储代理凭据

答案 9 :(得分:0)

如果您需要强制 Git 或 GitHub 客户端绕过代理(使用直接连接),只需将 .gitconfig 中的代理 URI 设置为空字符串。您可能需要手动编辑文件,我没能说服 git config 命令将配置指令的值设置为空字符串(尝试 git config --global http.proxy "")。

因此只需将以下几行添加到 ~/.gitconfig 中:

[http]
    proxy = ""
[https]
    proxy = ""