ChatGPT解决这个技术问题 Extra ChatGPT

代理背后的 GitHub 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 client 仍然无法识别代理:文件 TheLog.txt always 的内容在启动时显示以下内容:

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

随后是几次失败的代理身份验证尝试的输出,所有这些都表明“凭据丢失”。

添加环境变量对我有用,但这是一个不可接受的解决方案,因为它将我的域/密码暴露给任何可以访问环境变量的应用程序。
jacobbenson.com/?p=302#sthash.DzPYdGUU.dpbs 解释说这是由 gui(正确使用 windows 集代理)在 git 命令的幕后调用 msysgit 引起的。 msysgit 使用 libcurl 处理 http 请求,它不使用 windows 代理设置。正在几个方面解决此问题,包括 github.com/libgit2/libgit2sharp 处的 libgit2sharp。

h
hexYeah

将这些条目添加到用户目录中的“.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>

如果您需要对代理的授权,请参阅 edufinn 答案:proxy=http://:@:
@JanHommes 最初的问题是专门询问如何在不以明文形式存储密码的情况下进行操作
@Sogger如果我的密码包含“@”字符,我应该如何配置密码,谢谢你的帮助。
如果您使用的是 CNTLM,请确保按照建议将代理指向 127.0.0.1 而不是 localhost。在 Windows 中,似乎 localhost 首先指向 CNTLM 不侦听的 IPv6 地址。因此,git 将等到超时(几分钟),然后再切换到 IPv4 地址。
A
Anton

尝试了上述所有方法 - 并没有成功,唯一对我有帮助的是 CNTLM - http://cntlm.sourceforge.net/

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

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

现在 cntlm 将执行所有身份验证,您将能够在 corp 代理后面使用 GitHub(和 Dropbox,顺便说一句)。至少在下一次更改密码之前:) (比做 cntlm -H 的东西)


如果 git clone、fetch 或 pull 等远程操作需要很长时间才能完成,请尝试将 .gitconfig 切换为: [https] proxy = 127.0.0.1:3128 [http] proxy = 127.0.0.1:3128
重启什么windows服务?
@Mukus cntlm - 如果我没记错的话,它在安装后以服务模式运行。
我进行了更改,重新启动它,它仍然无法正常工作。
e
edufinn

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

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

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

奇怪的是 GitHub GUI Client 能够连接到 GitHub 进行用户身份验证,但唯一的问题是从 GitHub 克隆、拉取和推送项目。似乎问题出在git实现上。我能够将 git 配置为通过我们的代理运行,而无需将我的凭据放入 git 全局设置中,并且它在执行拉取或推送请求时要求我提供凭据。但这仅在 Git Shell 中有效。


那是因为 GitHub 可能使用从操作系统中提取代理信息的某些组件在内部进行身份验证,可能是一些 SingleSignOn 解决方案,而 git 本身则没有。我对 SourceTree 有同样的问题。我还发现,当 git 工作时,它需要很长时间才能工作,这使得 SourceTree 无法使用。
这可能是因为 Github 正在尝试使用通常被过滤的 git 端口,因为它不是 IT 人员看到的常见端口。请参阅我的答案以获取替代方案。
M
Manivannan

如果您在企业中使用 GitHub for Windows,那么您很有可能在一个严重的企业防火墙/代理背后。 GitHub for Windows 在其 GUI 中还没有用于设置选项的代理参数。

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

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

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


D
DustinTheDev

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

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

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 中设置的代理信息。日志消息似乎与我们在配置文件或环境变量中设置的内容无关。


b
bysreg

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

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

我正在使用 tortoisegit,它很容易设置代理。只需右键单击任意位置,tortoisegit>network,启用代理服务器并设置服务器地址、用户名和密码。完毕

据我记得,tortoisegit 也可以在 github 上开箱即用。


r
royatirek

这是在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

PS->我建议使用这种方法来设置代理,因为随着您的进一步了解,一切都会落实到位
Source


A
Aksakal almost surely binary

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


A
AdamsTips

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

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

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

其次,(这是我们所缺少的部分)您需要在代理服务器上配置一个例外,以允许 未经身份验证的 代理流量到 *.github.com

https://i.stack.imgur.com/5KVzb.jpg

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

另请注意,此方法不需要在 .gitconfig 文件中存储代理凭据


D
David Ferenczy Rogožan

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

因此,只需将以下行添加到 ~/.gitconfig

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

如果您在公司环境中并且无法绕过代理,这将不起作用。