三种 git 协议的代理配置方法

环境:WSL2(Ubuntu-20.04.4 LTS),Proxy 运行在 windows 的 12345 端口,打开允许来自局域网的连接。

获取windows的ip

WSL2 把 windows 的虚拟网卡 vEthernet 作为默认网关,所以代理地址是 $(ip route | grep default | awk '{print $3}'):12345

配置 git 代理

https://

适用于形如 git clone https://path/to/repository.git 的命令:

1
2
$ export http_proxy=http://$(ip route | grep default | awk '{print $3}'):12345
$ export https_proxy=http://$(ip route | grep default | awk '{print $3}'):12345

git@

形如 git clone git@github.com:path/to/repository.git 的命令,本质上用了 ssh 和服务器通信,所以要配置 ssh 代理。配置文件在 ~/.ssh/config

1
2
3
4
5
Host github.com
HostName github.com
User git
IdentityFile ~/.ssh/github
ProxyCommand connect -H <hostip>:12345 %h %p

其中 ProxyCommand 这一项就是关于 ssh 代理的配置。connect -H <hostip>:12345 %h %p 是 ssh 连接时执行的命令。

connect 可能需要通过 apt install connect-proxy 安装。-H 指明通过 http 协议进行连接,<hostip> 需要改成 vEthernet 的 ip,%h %p 是 ssh 命令自己传入的参数,即服务器的 hostname 和 port。

上面的命令唯一需要自己改写的地方就是 <hostip> ,可以在 ~/.bashrc 中自动替换。

git://

形如 git clone git://path/to/repository 的命令配置代理较为特殊。

首先要写一个执行代理命令的脚本,比如叫 gitproxy.sh

1
2
#!/bin/sh
connect -H $(ip route | grep default | awk '{print $3}'):12345 "$@"

chmod +x gitproxy.sh 添加执行权限。然后配置:

1
$ git config --global core.gitproxy "/path/to/gitproxy.sh"

“$@” 在 sh 中表示脚本被执行时传入的全部参数,在这里的作用等同于 ssh 配置命令中的 %h %p

至此,三种协议的 git 代理配置都已经列举完毕。


三种 git 协议的代理配置方法
https://ch3chohch3.github.io/2022/05/11/git_proxy/
作者
CH3CHOHCH3
发布于
2022年5月11日
许可协议