我背后的公司代理很烦人:
如何在此场景中成功克隆github存储库?
答案 0 :(得分:10)
第一个问题与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
。
要真正让git使用代理,我必须使用git config --global http.proxy http://<domain>\<username>:<password>@default-proxy:8080
。
明显的缺点是您将域密码以明文形式存储在硬盘上。
其他设置不起作用,尽管不同来源声称应该这样做。那些是:
https_proxy
或http_proxy
设置为http://<domain>\<username>:<password>@default-proxy:8080
git config --global https.proxy http://<domain>\<username>:<password>@default-proxy:8080
http_proxy
设置为http://<domain>\<username>:<password>@default-proxy:8080
要解决第三个问题,最简单的可能性是通过设置环境变量来忽略证书错误 - 代理返回的证书无论如何都不值得:
set GIT_SSL_NO_VERIFY=true
要不在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"