服务器科学上网配置手册 (SSH Remote Forwarding)
场景: 本地电脑 (Windows/Mac) 有 Clash,云服务器 (Linux) 需要拉取 GitHub 代码或 Docker 镜像。
核心原理: 利用 SSH 建立反向隧道,将服务器流量转发回本地 Clash 端口。
一、 本地电脑/云端服务器准备 (Clash/pw+ssh允许)
打开 Clash 界面。
- 记下端口: 确认 混合端口 (Mixed Port) 为 7890(默认值)。
- 检查服务器 SSH 配置: 如果从未连过,请确保
/etc/ssh/sshd_config中允许密码登录 (PasswordAuthentication yes),否则可能无法建立隧道。
二、 建立隧道 (在本地终端执行)
打开 Windows PowerShell (或 CMD),运行以下命令建立连接。 注意:此窗口不能关闭,关闭则断网。
ssh -N -R 远程端口:本地IP:本地端口 用户名@服务器IP
- 如果遇到
Permission denied,请检查账号密码,并确认上述 SSH 配置已加载 (service ssh restart)。 - 成功标志: 输入密码回车后,光标卡住不动/无报错。
三、 服务器端配置 (在服务器终端执行)
场景 A:日常下载 (curl, wget, git, python pip)
这种配置是临时的,关闭窗口失效。每次登录需要重新输入。
方法 1:手动配置
export http_proxy=http://127.0.0.1:7890
export https_proxy=http://127.0.0.1:7890
方法 2:偷懒脚本 (推荐)
可以在你能记住的目录下把上面的配置预先写入sh文件,可以直接加载使用(如 ~/ops-scripts/ ):
- 开启代理:
source ~/ops-scripts/proxy_on.sh - 关闭代理:
source ~/ops-scripts/proxy_off.sh
验证命令:
curl -I https://www.google.com
(应返回 200 OK)
docker 需要额外设置,原因是:Shell 的环境变量代理 (export ...) 对 Docker Daemon 进程不生效,导致无法拉取镜像。
场景 B:Docker 镜像加速
建议使用阿里云官方的镜像加速服务(比走 SSH 代理更稳)。
登录阿里云获取专属加速地址: 阿里云容器镜像服务控制台 (获取类似
https://xxxx.mirror.aliyuncs.com的地址)修改配置文件: 配置文件路径:
/etc/docker/daemon.json
{
"registry-mirrors": ["https://xxxx.mirror.aliyuncs.com"]
}
场景 C:Docker 走 SSH 代理 (进阶:通过 SSH 隧道拉取镜像)
当阿里云镜像没有资源,且需要临时通过 SSH 隧道 (127.0.0.1:7890) 拉取 Docker 镜像时使用。
1. 原理:为什么 Shell 代理对 Docker 无效?
- Shell (终端):
export http_proxy只是给前台终端配了代理,curl/wget有效。 - Docker Daemon (后台):拉取镜像是后台服务
dockerd执行的,它看不到终端的环境变量,所以必须单独给它配置。
2. 配置步骤 (开启代理)
第一步:创建配置目录
sudo mkdir -p /etc/systemd/system/docker.service.d
第二步:写入代理配置
sudo tee /etc/systemd/system/docker.service.d/http-proxy.conf <<-'EOF'
[Service]
Environment="HTTP_PROXY=http://127.0.0.1:7890"
Environment="HTTPS_PROXY=http://127.0.0.1:7890"
Environment="NO_PROXY=localhost,127.0.0.1,.aliyuncs.com"
EOF
注意:
NO_PROXY为了防止 Docker 访问本地或阿里云镜像时也绕路。
第三步:重载配置并重启 Docker
sudo systemctl daemon-reload
sudo systemctl restart docker
第四步:验证
sudo docker info | grep Proxy
# 应输出:
# HTTP Proxy: http://127.0.0.1:7890
# HTTPS Proxy: http://127.0.0.1:7890
验证通过后,即可正常执行 sudo docker pull。
注意 🚨:
- 只要配置了此文件,Docker 就会一直依赖你本地电脑的 SSH 代理。如果你关掉本地 SSH 隧道或关机,Docker 拉取镜像会报错 (Timeout)。
- 权限问题:Docker Daemon 权限很高,普通用户执行命令可能遇到
Permission Denied,请加上sudo。- 故需要在下载结束后进行清理。↓↓↓
3. 清理步骤 (关闭代理 - 建议用完即删)
下载完成后,建议清理配置,让 Docker 恢复“自由身”。
# 1. 删除配置文件
sudo rm -f /etc/systemd/system/docker.service.d/http-proxy.conf
# 2. 重载配置
sudo systemctl daemon-reload
# 3. 重启 Docker
sudo systemctl restart docker
验证:再次运行 sudo docker info | grep Proxy,应无输出。
