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

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

  1. 使用的实际代理地址由脚本确定
  2. 它需要authentication
  3. 它使用HTTPS replace网页的证书

在这种情况下如何成功克隆github仓库?

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

    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_proxyhttp://<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 

为了不将简单密码存储在git配置中,可以使用本地代理,例如cntlm 。

它允许存储密码散列。 要获得散列,请使用以下命令:

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

之后,系统会提示您输入密码。 结果将是一个三个哈希列表,其中PassNTLMv2最有可能是在这种情况下相关的一个。 将cntlm.ini中的Password行替换为输出中的行,包括PassNTLMv2部分。

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

如果你还想写访问github你将不得不能够通过代理ssh访问github。 要做到这一点,你可以使用corkscrew

总之这是你如何做到这一点:
首先打开开瓶器
然后在~/.ssh/proxy_auth创建一个包含<proxy_username>:<proxy_password>
现在告诉ssh使用github.com通过代理加入~/.ssh/config来访问github.com

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

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