如何从公司代理后面的github克隆

时间:2013-03-01 12:22:08

标签: windows git github

我背后的公司代理很烦人:

  1. 使用的实际代理地址由脚本
  2. 决定
  3. 需要身份验证
  4. 使用HTTPS
  5. 替换网页证书

    如何在此场景中成功克隆github存储库?

3 个答案:

答案 0 :(得分:10)

  1. 第一个问题与git没有关系 - 更多的是它是实际配置代理的必要步骤。
    可以在控制面板上找到Windows计算机上的代理配置 - >互联网选项 - >连接 - >局域网设置。
    如果选中“使用自动配置脚本”,则首先需要下载指定的文件并将其打开。我有一个包含小脚本的文件。它看起来像这样:

    function FindProxyForURL(url, host)
    {
        var myip = myIpAddress();
        var hostip = dnsResolve(host);
        if (isInNet(hostip,"192.168.0.0","255.255.0.0"))
            return "DIRECT";
        if (isInNet(hostip,"xyz.abc.0.0","255.255.0.0"))
            return PROXY special-proxy:8080;
        return "PROXY default-proxy:8080";
    }
    

    因此,就我而言,要使用的代理是default-proxy:8080

  2. 要真正让git使用代理,我必须使用git config --global http.proxy http://<domain>\<username>:<password>@default-proxy:8080

    明显的缺点是您将域密码以明文形式存储在硬盘上。

    其他设置不起作用,尽管不同来源声称应该这样做。那些是:

    1. 将环境变量https_proxyhttp_proxy设置为http://<domain>\<username>:<password>@default-proxy:8080
    2. 将全局git配置设置为该值:git config --global https.proxy http://<domain>\<username>:<password>@default-proxy:8080
    3. 将环境变量http_proxy设置为http://<domain>\<username>:<password>@default-proxy:8080
  3. 要解决第三个问题,最简单的可能性是通过设置环境变量来忽略证书错误 - 代理返回的证书无论如何都不值得:

    set GIT_SSL_NO_VERIFY=true
    

  4. 要不在git config中存储普通密码,您可以使用本地代理,例如cntlm

    它允许存储密码哈希。要获取哈希值,请使用以下命令:

    cntlm.exe -H -d <domain> -u <username>
    

    之后,系统将提示您输入密码。结果将是三个哈希的列表,其中PassNTLMv2最可能是此场景中的相关哈希值。将cntlm.ini中的Password行替换为输出中的行,包括PassNTLMv2部分。

    显然,你现在必须配置git来使用这个本地代理。

答案 1 :(得分:1)

如果您还想要对github进行写访问,则必须能够通过代理获得对github的ssh访问权限。 为此,您可以使用corkscrew

简而言之,这就是你如何做到这一点:
首先解压corkscrew
然后在~/.ssh/proxy_auth中创建一个包含<proxy_username>:<proxy_password>的文件 现在告诉ssh使用corkscrew通过代理访问github.com,将以下内容添加到~/.ssh/config

host github.com
    port 22
    proxycommand corkscrew <proxy_ip_address> <proxy_port> %h %p ~/.ssh/myauth

现在测试ssh是否可以通过ssh -T git@github.com通过代理。如果这样做,git:/协议也应该能够通过代理。

答案 2 :(得分:0)

如果您不想每次尝试在公司代理服务器后面克隆某些内容时都设置代理,请尝试在主目录中查找“。 bashrc ”文件并进行设置。从下一次开始,您将无需手动进行设置。

如果您的代理服务器设置如下:

Server: myproxyserver
Port: 8080
Username: mydomain\myusername
Password: mypassword

在.bashrc文件中,设置以下内容:

set HTTP_PROXY="http://mydomain\\myusername:mypassword@myproxyserver:8080"
export HTTP_PROXY="http://mydomain\\myusername:mypassword@myproxyserver:8080"
set HTTPS_PROXY="http://mydomain\\myusername:mypassword@myproxyserver:8080"
export HTTPS_PROXY="http://mydomain\\myusername:mypassword@myproxyserver:8080"