为git设置代理解决远程仓库无法连接问题
由于一些众所周知的原因,国内直连GitHub经常会遇到一些问题。为git设置代理可以解决GitHub网页可以打开而git无法连接远程仓库的问题。
准备工作
- 电脑可以正常打开GitHub
- 本机有代理软件运行或局域网内有其他机器可以作为代理
这是本教程生效的前提。如果GitHub网页版无法打开请尝试魔法上网。
为git配置http代理
Windows平台中git默认不采用系统代理,因此即使打开了代理软件、浏览器可以访问GitHub,使用git连接GitHub远程仓库仍然可能会出现无法访问的情况。因此需要修改git的设置,为git配置代理。
Windows、Linux、Mac OS X平台git命令相同:
1 | 配置socks5代理 |
注意如下几点:
- socks5和http两种协议由你使用的代理软件决定,不同软件对这两种协议的支持不一,如果不确定可以都尝试一下
- 命令中的主机号(上面的
127.0.0.1
)是你使用的代理的主机号,如果代理软件运行在本机则填入127.0.0.1
即可,否则填入代理主机IP - 命令中的端口号为代理软件或代理主机的监听IP,同样可以从代理软件配置中获得
也可以指定代理的作用域:
1 | 只对github.com |
取消代理:
1 | 取消代理 |
配置成功以后就可以使用https协议连接GitHub远程仓库了。
为git配置SSH代理
上面的方法配置git代理虽然可以连接GitHub远程仓库,但是只能使用https协议连接,一是每次都要输入密码比较麻烦,二是不如SSH连接使用密钥验证安全。GitHub也在寻求使用密钥全面替代密码验证1。
因此可以修改系统SSH服务的配置来为git的SSH连接设置代理,绕过GFW的封锁。
Windows平台
Windows平台的git中预置了connect.exe,可以用来接管git的流量。可以通过修改本地SSH配置文件来更改git的代理设置。
Windows平台配置文件位于C:\Users\$USERNAME$\.ssh\config
,其中USERNAME是你的用户名。
在文件中加入如下配置:
1 | Host github.com *.github.com # 指定代理规则作用域 |
注意选择SOCKS还是HTTPS代理需要根据代理软件支持的协议而定。如果软件在本机运行,host设置为本机(127.0.0.1)即可,端口号则设置为代理软件的监听端口号。以Clash for Windows为例,此时监听端口号就是7890:
Linux/Mac OS X
类Unix系统更改配置比较简单,配置文件一般在~/.ssh/config
下,在文件中添加:
1 | Host github.com *.github.com |
系统配置的修改一般需要超级管理员权限
参考资料
[1] GitHub shifts away from passwords with security key support for SSH Git operations | ZDNet