代理后面的 GitHub Windows 客户端

我正在尝试让 GitHub 的 Windows 客户端工作。我在一台公司的 Win 7 x64电脑上在一个公司代理和防火墙后面。通过阅读其他各种文章,并尝试多种环境变量和配置变量的组合,我发现克隆和推动更新的唯一方法是使用 HTTPS _ PROXY 环境变量,包括我的完整公司域用户 ID 和密码。

从安全角度来看,这是不可接受的,还有别的办法吗?

附加说明:

以下措施奏效了:

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

没有的工作如下:

  • 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

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

82549 次浏览

i dont know about your firewall, but my campus use proxy

do you use any git gui? EDIT : just noticed that you're using github client for windows

i am using tortoisegit and its very easy to set the proxy. Just right click anywhere, tortoisegit>network, enable proxy server and set server address, username, and password. done

as far as i remember, tortoisegit will also works out-of-the-box with github.

I was able to make GitHub Shell to work with our corporate proxy. I'm starting GitHub Shell and execute following command:

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

I would really like to make GUI to work too. But I don't want to set Windows global environment variable which contains my corporate credential information.

Strangely GitHub GUI Client is able to connect to GitHub for user authentication, but only problem is with cloning, pulling and pushing projects from and into GitHub. It seems like the problem is with git implementation. I was able to configure git to run through our proxy without putting my credentials in the git global settings and it was asking for my credentials while performing pull or push requests. But that was working only in Git Shell.

I've also run into this issue, and tried to dig into it a bit as well (disassembled the client).

The piece of code that generates the log messages we're seeing is as follows:

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);
}
}

So this block only logs the proxy information that's setup in IE. The log message appears to have no bearing on what we have setup in the config files or environmental variables.

If you’re using GitHub for Windows in a corporate, chances are high that you’re behind a big bad Corporate Firewall/Proxy. GitHub for Windows doesn’t yet have the proxy parameters in its GUI for setting Options.

To configure GitHub for Windows to use your corporate proxy, edit the .gitconfig file typically found at C:\Users\.gitconfig or C:\Documents & Settings\.gitconfig

Close GitHub for Windows; In .gitconfig, just add

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

Add these entries to your '.gitconfig' file in your user directory (go to %USERPROFILE%):

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


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

And if you don't want to store your password in plaintext, I would use a local proxy forwarder like CNTLM which allows you to direct all traffic through it and can store the passwords hashed.


Unlike the original question, if you don't care if your password is in plain text add these:

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


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

Tried everything of above - and didn't succeed, only thing that helped me is CNTLM - http://cntlm.sourceforge.net/.

Install it and run cntlm -H, than authenticate to corp proxy, edit cntlm.ini file with the output of cntlm, restart the windows service. Update .gitconfig with:

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

Now cntlm will do all the authentication, and you'll be able to use GitHub(and Dropbox, btw) behind the corp proxy. At least until next password change :) (than do cntlm -H stuff again)

I found this blog to be useful. It describes ntlmaps proxy. It's probably less secure, but worked smoothly. I couldn't get cntlm working.

For us, the solution involved two different things. First, as described in Sogger's answer, you need to add the entries to your .gitconfig file, located in %USERPROFILE%.

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


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

Second, (and this was the missing piece for us,) you need to configure an exception on the proxy server to allow non-authenticated proxy traffic to *.github.com

In iPrism, it looks like this: enter image description here

The problem is not so much the proxy, but the authentication. Bypassing the authentication requirement allows the needed communication to clone and work with projects using the GitHub desktop client.

Also note that this approach did not require storing proxy credentials in the .gitconfig file.

Here is the way to set proxy in github

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

Here in my college we don't have username and password, so if our college ip is 172.16.10.10 and port is 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 -> I would recommend using this method to set proxy as things will fall into place as you will learn further
Source

In case you need to force Git or GitHub client to bypass the proxy (use the direct connection), just set the proxy URI in the .gitconfig to an empty string. You'll probably have to edit the file manually, I didn't manage to persuade the git config command to set the value of a configuration directive to an empty string (tried git config --global http.proxy "").

So just add the following lines to the ~/.gitconfig:

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