Git设置代理服务器

2,198 阅读3分钟

有些时候由于连不上Git服务器而我们又需要推送代码,这时就需要设定Git代理服务器。

1,httphttps代理

如果说使用的是项目http或者https地址,就配置httphttps代理即可,输入以下命令:

git config --global http.proxy "http://地址:端口"
git config --global https.proxy "http://地址:端口"

例如设定一个本地代理:

git config --global http.proxy "http://127.0.0.1:1080"
git config --global https.proxy "http://127.0.0.1:1080"

这样使用git clone/push/pull所有http或者https地址项目都会走代理。

还可以使用下面命令取消代理设置:

git config --global --unset http.proxy
git config --global --unset https.proxy

2,SSH代理设定

如果说项目使用的ssh地址,那么就需要配置ssh代理。

(1) 安装前置工具

SSH代理通常借助其它命令完成,因此我们需要先安装一些工具。

在Windows上使用的是connect命令进行代理,在Git Bash中自带了,如果你使用的是Git Bash则无需再手动安装。

不过对于Msys2环境的Git,则需要安装一下:

pacman -S ucrt64/mingw-w64-ucrt-x86_64-connect

此外,还需要把ucrt64环境所在目录(通常是你的Msys2安装目录\ucrt64\bin)加入到系统Path环境变量中,这时connect命令才可以使用。

对于Linux操作系统,通常使用ncat命令完成代理,通过下列命令安装:

sudo apt install ncat

(2) 进行配置

我们需要编辑ssh的配置文件,位于用户文件夹下的.ssh文件夹下。

  • Windows ssh配置文件路径:C:\Users\你的用户名\.ssh\config
  • Linux ssh配置文件路径:/home/你的用户名/.ssh/config

使用文本编辑器打开配置文件config加入下列配置:

Windows系统:

ProxyCommand connect -S 代理地址:端口 %h %p

Linux系统:

ProxyCommand ncat --proxy 代理地址:端口 --proxy-type socks5 %h %p

如果说.ssh文件夹不存在或者config文件不存在就自己创建一个。

配置好了,通过ssh协议操作就会走代理了。

上面是配置全局走代理,事实上一般只需要为指定网址配置代理,例如只为Github配置代理,就在配置文件加入:

Windows系统:

Host github.com
	ProxyCommand connect -S 代理地址:端口 %h %p

Linux系统:

Host github.com
	ProxyCommand ncat --proxy 代理地址:端口 --proxy-type socks5 %h %p

Host后面接的就是指定要走代理的地址,可以接多个地址例如:

Windows系统:

Host github.com gitlab.com
	ProxyCommand connect -S 代理地址:端口 %h %p

Linux系统:

Host github.com gitlab.com
	ProxyCommand ncat --proxy 代理地址:端口 --proxy-type socks5 %h %p

可见多个地址使用空格隔开放在Host后面即可,这个例子就是同时指定ssh访问github.comgitlab.com时走代理。

3,ssh代理连通性测试

例如配置了Github的ssh代理后,我们可以通过下列命令测试连通性:

ssh -T git@github.com

若输出下列消息则说明配置成功且能够通过代理访问

Hi xxx! You've successfully authenticated, but GitHub does not provide shell access.

反之,如果输出下列消息:

kex_exchange_identification: Connection closed by remote host
Connection closed by UNKNOWN port 65535

这就说明配置错误,或者当前代理服务器节点存在问题或不支持ssh协议,重新配置或者更换代理服务器再试。