【问题标题】:How to set up Git to get through a proxy如何设置 Git 以通过代理
【发布时间】:2011-12-05 18:40:50
【问题描述】:

我想在工作中连接到 GitHub,需要通过 http 代理。我可以使用 cURL 使用命令退出 FTP

curl -v -g --ftp-pasv --upload-file MYFILE --proxy PROXYADDRESS:PROXYPORT --proxy-ntlm --proxy-user WINDOWSDOMAIN\WINDOWSUSER:WINDOWSPASSWORD ftp://FTPUSER:FTPPASS@FTPURL/

到目前为止,我无法为 Git 提供等效设置。

我尝试按照 cygwin 下 Using Github Through Draconian Proxies 的说明进行操作。

我已经安装了开瓶器并尝试通过 SSH 连接到 GitHub

ssh github.com

ssh ssh.github.com

我回来了

ssh:无法解析主机名 ssh.github.com:提供主机名或服务名,或未知。

我已尝试设置 http 和 https 代理。

这是 git --config -l 的输出

core.symlinks=false
core.autocrlf=true
color.diff=auto
color.status=auto
color.branch=auto
color.interactive=true
pack.packsizelimit=2g
help.format=html
http.sslcainfo=C:/Program Files/Git/bin/curl-ca-bundle.crt
sendemail.smtpserver=/bin/msmtp.exe
diff.astextplain.textconv=astextplain
user.name=Peter Wilkinson
user.email=someemail@gmail.com
github.user=ProggerPete
github.token=shouldprobablykeepthissecret
http.proxy=http://somedomain\someuser:somepass@10.167.116.142:80
https.proxy=http://somedomain\someuser:somepass@10.167.116.142:80

我也跑了

export https_proxy=http://somedomain\someuser:somepass@10.167.116.142:80
export http_proxy=http://somedomain\someuser:somepass@10.167.116.142:80
set https_proxy=http://somedomain\someuser:somepass@10.167.116.142:80
set http_proxy=http://somedomain\someuser:somepass@10.167.116.142:80

然后我尝试克隆并获取。

$ git clone https://ProggerPete@github.com/project/JavaScript-Maven-Plugin.git
Cloning into JavaScript-Maven-Plugin...
Password:
error: The requested URL returned error: 407 while accessing https://ProggerPet
@github.com/project/JavaScript-Maven-Plugin.git/info/refs

fatal: HTTP request failed

在我看来,我的代理身份验证失败。但是,我使用的是相同的登录名并通过 cURL 用于 FTP。

如何连接?

【问题讨论】:

标签: git proxy github cygwin


【解决方案1】:

经过一番猛烈抨击后,我终于偶然发现了http://cntlm.sourceforge.net/。它是一个理解 ntlm 身份验证的代理代理。

我安装了它并告诉它有关 http 代理的信息。然后将 git 指向 CNTLM,一切都开始工作了。

我发现这很令人沮丧,所以希望这会帮助其他处于相同情况的人。

【讨论】:

  • 很高兴知道这一点。已知仅执行 NTLM 身份验证的代理存在问题,这看起来是一种有用的解决方法。 msysGit 提供的 curl 版本可以做 NTLM,但我似乎记得 git 不会向它传递身份验证参数。
  • 是的,我可以让 msysgit 中的 curl 从命令行与代理对话,但是当 git 使用它时似乎无法传递 --proxy-ntlm 标志。
  • 我遇到了类似的问题,我不能在工作中使用 git 或 ssh 进入我的盒子。这个解决方案也适用于 ubuntu 吗?您能否详细说明pointed git at CNTLM。我还处于打头阵阶段。
  • @ali 你有 NTLM 需要处理吗?我似乎不需要它,尽管我在 AD/Windows 网络上运行 Ubuntu 服务器。不过,我不知道哪种代理服务器挡在我面前。
  • 最新的 1.8 msysGit 现在可以使用 NTLM,包括用于智能卡的 GSSPI(感谢 CURL!)
【解决方案2】:

我通常只需要设置:

set http_proxy=http://<login_internet>:<password_internet>@aproxy:aport
set https_proxy=http://<login_internet>:<password_internet>@aproxy:aport

(注意https_proxy指的是同一个http,不是https,代理地址)

另见“Cannot get Http on git to work”。

【讨论】:

  • 试一试,看来我的代理身份验证仍然失败。
【解决方案3】:

你可以把代理信息放在你的~/.curlrc中:

/home/usr/.curlrc

代理 = proxy.proxyhost.com:8443
代理用户 = 用户:通过
代理-ntlm = true
noproxy = localhost,127.0.0.1,intraweb.company.com

【讨论】:

    【解决方案4】:

    您不太可能通过您的代理将 ssh 连接到 github。但是,由于 github 为其所有存储库提供 https url,您可以推送不需要 ssh。如果您已经签出了存储库,则可以更改与

    一起使用的 url
    git remote set-url origin https://github.com/project/repo.git
    git remote set-url --push origin https://YOURNAME@github.com/project/repo.git
    

    (如果您不需要推送访问,请跳过第二行)。 这与设置 VonC 提到的环境变量 (https_proxy) 一起将允许通过您的代理进行访问。

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-12-31
    • 2011-08-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-09-16
    • 1970-01-01
    相关资源
    最近更新 更多