ssh 代理转发,让服务器上外网

由于是自己的电脑充当代理,所以需要用 -R 选项。

ssh -N -n -R 0.0.0.0:11625:127.0.0.1:12341 服务器

这是将远程的一个端口连到本地的端口。-N 表示不要执行命令,仅仅转发端口。-n 表示将 stdin 重定向到 /dev/null。

但是如果想要把这个代理用到 docker 构建中,又会有一点问题。因为 docker 容器本身有不同的网段,不能写 localhost,而是要写 host 的 ip。

sshd_config 里要打开 AllowTcpForwarding 选项,否则 -R 远程端口转发会失败。

默认转发到远程主机上的端口绑定的是 127.0.0.1,如要绑定 0.0.0.0 需要打开 sshd_config 里的 GatewayPorts 选项。这个选项如果由于权限没法打开也有办法,可配合 ssh -L 将端口绑定到 0.0.0.0。

改完记得用 systemctl 重载配置。(不清楚 daemon-reload 是不是必须的)

然后 docker 构建时要显式传入参数:

docker build . \
    --build-arg HTTP_PROXY=http://192.168.236.148:11625 \
    --build-arg HTTPS_PROXY=http://192.168.236.148:11625