1 引言

近期遇到了一个棘手的问题,我使用的云服务器无法直接连接到 GitHub,使得我无法下载任何开源项目,包括之前维护的代码和下载新的项目。面对这种困扰,我选择了配置代理的方式来解决问题。然而,我很快发现,在一个没有图形用户界面(GUI)的服务器上配置代理,支持 SSH 和 HTTP 两种方式,这个过程比我预想的要复杂很多。

这个问题可能会影响到很多人,我决定写一篇详细的文章,介绍在 Linux 环境下如何配置和使用网络代理连接 github。下文将详细介绍如何使用环境变量来设置代理,如何在 Git 中配置代理,以及一些常用的代理调试工具。

2 配置代理

1
2
3
4
5
6
export http_proxy=http://host:port/  
export https_proxy=$http_proxy
export ftp_proxy=$http_proxy
export rsync_proxy=$http_proxy
export all_proxy=$http_proxy
export no_proxy="localhost,127.0.0.1,localaddress,.localdomain.com"

3 git 设置 http 代理

最常用的访问 git 的方式是 http 方式,形如:

1
$ git clone https://github.com/xxx/yyy/

在这种情况下,正常连接需要设置 http proxy。

3.1 设置

1
2
$ git config --global http.proxy http://host:port
$ git config --global https.proxy https://host:port

3.2 查看当前配置

1
$ git config --global -l

3.3 取消代理

1
2
$ git config --global --unset http.proxy
$ git config --global --unset https.proxy

4 设置 ssh 代理

我们也常常使用 ssh 方式操作 gihub 项目,形如:

1
git clone git@github.com:xxx/yyy.git

这种方式使用 ssh 与 github 建立连接,无法使用 http proxy 设置,具体设置方法如下:

1
2
3
4
5
6
7
8
$ vi ~/.ssh/config

编辑如下:

Host github.com
HostName github.com
User git
ProxyCommand nc -x host:port %h %p

(注意:这里的 host:port 不是 http 代理,是 socks 代理)

测试 nc 命令是否正常

1
$ nc -x host:port github.com 22

测试 git 的 ssh 方式是否正常

1
$ ssh -T git@github.com