VSCode Remote SSH + Codex 通过 SSH RemoteForward 复用本地代理
本地 SSH 配置中开启远程 shell 和 VSCode Remote Server 都配置代理环境变量:给 Codex 单独写一份,并重启 VSCode Remote Server。最终效果:远程服务器、VSCode Remote 扩展、Codex app-server 都可以通过本地代理访问外网。
VSCode Remote SSH + Codex:通过 SSH RemoteForward 复用本地网络出口
适用场景:本地开发机可以正常访问所需的 AI 编程服务,但远程计算服务器的外部网络受限。通过 VSCode Remote SSH 连接远程服务器后,希望在远程窗口中正常使用 Codex 扩展。
1. 背景与思路
我的实际环境是:
- 本地开发机网络正常,可以完成 Codex 登录和服务访问;
- 远程服务器位于受限网络环境中,只能通过 SSH / 内网连接方式登录;
- VSCode Remote SSH 可以连接远程服务器,但远程侧的 Codex 会反复重连;
- 本地已有一个可用的网络出口端口:
127.0.0.1:7989。
常见现象如下:
Reconnecting... 1/5
Reconnecting... 2/5
Reconnecting... 3/5
Reconnecting... 4/5
Reconnecting... 5/5
timeout waiting for child process to exit
最终解决分两步:
第一步:把本地 ~/.codex 复制到远程服务器,解决 Codex 认证问题。
第二步:使用 SSH RemoteForward,把远程请求转发到本地网络出口,解决远程侧访问问题。
最终链路如下:
远程服务器 Codex / VSCode Server
↓
远程 127.0.0.1:17897
↓ SSH RemoteForward
本地开发机 127.0.0.1:7989
↓
本地网络出口
↓
目标 AI 编程服务 / API 服务
本文使用的端口:
| 名称 | 地址 |
|---|---|
| 本地网络出口端口 | 127.0.0.1:7989 |
| 远程转发入口端口 | 127.0.0.1:17897 |
2. 复制本机 Codex 认证目录
先在本地开发机确认已经登录过 Codex:
ls ~/.codex
推荐直接复制整个目录到远程:
scp -r ~/.codex a5000@你的服务器IP:~/
也可以只复制认证文件:
ssh a5000@你的服务器IP "mkdir -p ~/.codex"
scp ~/.codex/auth.json a5000@你的服务器IP:~/.codex/auth.json
远程服务器上设置权限:
chmod -R go-rwx ~/.codex
ls -la ~/.codex
如果能看到 auth.json,说明认证信息已经复制过去。
注意:~/.codex/auth.json 是认证文件,包含登录信息,不要提交到 Git 仓库,也不要贴到公开网页或截图里。
3. 本地 SSH 配置 RemoteForward
在本地开发机编辑:
nano ~/.ssh/config
加入:
Host ThinkStation
HostName 你的服务器IP或连接域名
User a5000
ServerAliveInterval 60
ExitOnForwardFailure yes
RemoteForward 127.0.0.1:17897 127.0.0.1:7989
关键是这一行:
RemoteForward 127.0.0.1:17897 127.0.0.1:7989
含义是:
远程服务器 127.0.0.1:17897 -> 本地开发机 127.0.0.1:7989
这里一定要用 RemoteForward,对应 SSH 的 -R,不是 LocalForward / -L。
如果不用配置文件,手动测试命令是:
ssh -R 127.0.0.1:17897:127.0.0.1:7989 ThinkStation
4. 验证 SSH 转发
连接远程服务器后,在远程执行:
curl -I -x http://127.0.0.1:17897 https://example.com
如果能看到类似:
HTTP/2 200
或者:
HTTP/1.1 200 OK
说明转发链路已经可用。
也可以使用你自己的目标 API 地址替换 https://example.com,只要不是连接超时或无法解析域名即可。
5. 配置远程环境变量
远程服务器编辑:
nano ~/.bashrc
建议放在 .bashrc 前面,尤其是放在 case $- in 判断之前:
export HTTP_PROXY=http://127.0.0.1:17897
export HTTPS_PROXY=http://127.0.0.1:17897
export NO_PROXY=127.0.0.1,localhost,::1
export http_proxy=http://127.0.0.1:17897
export https_proxy=http://127.0.0.1:17897
export no_proxy=127.0.0.1,localhost,::1
生效并验证:
source ~/.bashrc
env | grep -i proxy
这里不配置 ALL_PROXY,实测 Codex 使用 HTTP_PROXY / HTTPS_PROXY 更稳定。
6. 配置 VSCode Remote Server 和 Codex 环境
只配置 .bashrc 不一定够,因为 VSCode extension host 不一定继承远程 terminal 的环境变量。
6.1 配置 VSCode Remote Server
远程执行:
mkdir -p ~/.vscode-server
nano ~/.vscode-server/server-env-setup
写入:
#!/usr/bin/env sh
export HTTP_PROXY=http://127.0.0.1:17897
export HTTPS_PROXY=http://127.0.0.1:17897
export NO_PROXY=127.0.0.1,localhost,::1
export http_proxy=http://127.0.0.1:17897
export https_proxy=http://127.0.0.1:17897
export no_proxy=127.0.0.1,localhost,::1
unset ALL_PROXY
unset all_proxy
赋权:
chmod +x ~/.vscode-server/server-env-setup
6.2 配置 Codex 专用 .env
这一步是解决 Codex 反复 Reconnecting 的关键。
远程执行:
mkdir -p ~/.codex
cat > ~/.codex/.env <<'CODEX_ENV'
HTTP_PROXY=http://127.0.0.1:17897
HTTPS_PROXY=http://127.0.0.1:17897
NO_PROXY=127.0.0.1,localhost,::1
http_proxy=http://127.0.0.1:17897
https_proxy=http://127.0.0.1:17897
no_proxy=127.0.0.1,localhost,::1
CODEX_ENV
chmod 600 ~/.codex/.env
7. 重启并验证
远程执行:
pkill -u "$USER" -f 'codex|app-server' || true
pkill -u "$USER" -f 'extensionHost' || true
pkill -u "$USER" -f '.vscode-server' || true
然后重新用 VSCode Remote SSH 连接服务器。
验证基础链路:
curl -I https://example.com
curl -I -x http://127.0.0.1:17897 https://example.com
验证 Codex / VSCode 进程是否拿到环境变量:
for p in $(pgrep -f 'codex|app-server|extensionHost'); do
echo "===== PID $p ====="
tr '\0' '\n' < /proc/$p/environ 2>/dev/null | grep -i proxy
done
正常应该能看到:
HTTP_PROXY=http://127.0.0.1:17897
HTTPS_PROXY=http://127.0.0.1:17897
http_proxy=http://127.0.0.1:17897
https_proxy=http://127.0.0.1:17897
最后确认 Codex 扩展安装在远程侧:
SSH: ThinkStation
而不是只安装在本地。
8. 常见坑
8.1 Could not resolve hostname your-server-alias
说明用了占位符,或者本地 ~/.ssh/config 没有配置对应 Host。应该使用真实配置好的别名,例如:
ssh ThinkStation
8.2 -L 和 -R 用反
当前需求是远程服务器访问本地网络出口,所以要用 RemoteForward / -R:
ssh -R 127.0.0.1:17897:127.0.0.1:7989 ThinkStation
8.3 .bashrc 中文引号错误
如果执行 source ~/.bashrc 报:
Command '“export' not found
说明混入了中文引号,检查并替换:
grep -n "“\|”" ~/.bashrc
sed -i 's/“//g; s/”//g' ~/.bashrc
8.4 Codex 仍然 Reconnecting
重点检查三件事:
curl -I https://example.com
cat ~/.vscode-server/server-env-setup
cat ~/.codex/.env
然后重启 VSCode Remote Server:
pkill -u "$USER" -f 'codex|app-server|extensionHost|.vscode-server' || true
9. 总结
这次能成功,关键是同时处理三个层面:
1. Codex 认证:复制本地 ~/.codex 到远程。
2. 网络转发:用 SSH RemoteForward,把远程 17897 转发到本地 7989。
3. 运行环境:配置 ~/.bashrc、~/.vscode-server/server-env-setup 和 ~/.codex/.env。
最终效果是:即使远程服务器的外部网络受限,也可以在 VSCode Remote SSH 的远程窗口里正常使用 Codex 扩展。
openEuler 是由开放原子开源基金会孵化的全场景开源操作系统项目,面向数字基础设施四大核心场景(服务器、云计算、边缘计算、嵌入式),全面支持 ARM、x86、RISC-V、loongArch、PowerPC、SW-64 等多样性计算架构
更多推荐

所有评论(0)