git三种协议的代理配置
最近在安装 MIT6.S081 的实验环境时又受到了国内网络的制裁,这里浅浅记录一下如何配置 git 的代理。
所用的环境是 WSL2 的 Ubuntu-20.04.4 LTS,SSR 运行在 windows 的 12345
端口,打开了允许来自局域网的连接。
获取windows的ip
众所周知,WSL2 会把 windows 的虚拟网卡 vEthernet 作为默认网关,所以我们需要的代理地址就是 ip:12345
,其中 ip 是 vEthernet 的地址。
然而 vEthernet 和 WSL2 的 ip 每次重启都会变,所以写一个 gethost.sh
来获取 vEthernet 的 ip:
1 |
|
然后 chmod +x gethost.sh
添加执行权限即可。
配置 git 代理
https://
对于形如 git clone https://path/to/repository.git
的命令,只需要
1 |
|
设置整个系统的全局代理即可。
git@
形如 git clone git@github.com:path/to/repository.git
的命令,本质上用了 ssh 来和服务器通信,所以要配置 ssh 代理。配置文件在 ~/.ssh/config
:
1 |
|
其中 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
中写一段脚本,通过 gethost.sh
实现自动替换。
git://
形如 git clone git://path/to/repository
的命令配置代理较为特殊。
首先要写一个执行代理命令的脚本,比如叫 gitproxy.sh
:
1 |
|
用 chmod +x gitproxy.sh
添加执行权限。然后配置:
1 |
|
“$@” 在 sh 中表示脚本被执行时传入的全部参数,在这里的作用等同于 ssh 配置命令中的
%h %p
。
至此,三种协议的 git 代理配置都已经列举完毕。