各类终端走代理的设置方法

最近在 GitHub 上游玩,发现各种终端中 git 操作都变得奇慢无比,于是今天一并记录一下各类终端走代理的方法。

假设代理的端口号为1080,以下的一切命令均通过 curl www.google.com 命令验证成功。

PowerShell

1
2
3
4
5
6
7
# 永久设置代理
$env:http_proxy="http://127.0.0.1:1080"
$env:https_proxy="http://127.0.0.1:1080"

# 取消代理
$env:http_proxy=""
$env:https_proxy=""

全局代理下 PowerShell 不需设置也可以走代理。

CMD

1
2
3
# 临时设置(暂未发现设置永久代理的较优方案)
set http_proxy=http://127.0.0.1:1080
set https_proxy=http://127.0.0.1:1080

Git Bash

1
2
3
4
5
6
7
# 永久设置代理
git config --global https.proxy http://127.0.0.1:1080
git config --global https.proxy https://127.0.0.1:1080

# 取消代理
git config --global --unset http.proxy
git config --global --unset https.proxy

WSL2

WSL2 的情况稍微复杂一点,因为 WSL2 不像 WSL1 一样和 Windows 共享网络端口,而是为 Linux 子系统分配了一张新的虚拟网卡,让Linux 虚拟机和 Windows 组成了一个局域网,因此想要通过运行在 Windows 的代理来上网,必须获取 Windows 的主机地址。

1
2
3
4
5
6
7
# 需预先获取主机地址保存到变量中
host_ip=$(cat /etc/resolv.conf |grep "nameserver" |cut -f 2 -d " ")
export ALL_PROXY="http://$host_ip:1080"

# 取消代理(注释上述两行配置)
# host_ip=$(cat /etc/resolv.conf |grep "nameserver" |cut -f 2 -d " ")
# export ALL_PROXY="http://$host_ip:1080"

建议将上述命令写到终端的配置文件(默认为.bashrc)中,这样每次启动 WSL 时就不需要手动设置一遍了。

以后再折腾

听说 proxychains 可以让每个应用单独走代理,而不需要用全局的方法,但目前暂时还没有这种需求,以后遇到了折腾。