在远控终端输入
echo "HTTP_PROXY=$HTTP_PROXY"
echo "HTTPS_PROXY=$HTTPS_PROXY"
echo "ALL_PROXY=$ALL_PROXY"
echo "http_proxy=$http_proxy"
echo "https_proxy=$https_proxy"
echo "all_proxy=$all_proxy"
curl -s https://ipinfo.io/json
看country字段显示的地区是哪里。如果这里显示的地区不受 OpenAI 支持,那么 Codex 报地区限制就是正常结果。
再检查当前环境里有没有以前遗留的 proxy5/SOCKS5:
env | grep -i proxy
常见问题包括:
ALL_PROXY=socks5://127.0.0.1:7891
或者:
HTTPS_PROXY=socks5://...
HTTPS_PROXY 一般不应直接填写 socks5://。SOCKS 代理通常放在 ALL_PROXY;HTTP 代理则放在 HTTP_PROXY 和 HTTPS_PROXY。
检查 Clash 到底监听哪个端口
执行:
sudo grep -nE '^(port|socks-port|mixed-port|external-controller|allow-lan|bind-address):' \
/root/.config/clash/config.yaml
可能看到:
mixed-port: 7890
socks-port: 7891
external-controller: 127.0.0.1:9090
含义是:
7890:HTTP 和 SOCKS 混合代理端口;7891:纯 SOCKS5;9090:Clash 控制接口,不是代理端口。
分别测试直连和 Clash 出口
直接连接
curl --noproxy '*' -s https://ipinfo.io/json
通过 mixed-port 7890
curl -x http://127.0.0.1:7890 -s https://ipinfo.io/json
通过 SOCKS5
curl --proxy socks5h://127.0.0.1:7891 -s https://ipinfo.io/json
如果没有 7891,而 Clash 只配置了 mixed-port: 7890,也可以测试:
curl --proxy socks5h://127.0.0.1:7890 -s https://ipinfo.io/json
建议写成 socks5h 而不是 socks5,因为 socks5h 会让 DNS 查询也通过代理。
观察这三个命令返回的 country 是否不同。很可能会出现:
- 浏览器使用 Clash:支持地区;
- Remote SSH 终端直连:不支持地区;
- 旧 SOCKS5 代理:另一个不支持地区。
1. 先备份 .bashrc
cp ~/.bashrc ~/.bashrc.backup
打开文件:
nano ~/.bashrc
把下面内容放在文件的最前面,要放在类似这段之前:
case $- in
*i*) ;;
*) return;;
esac
添加:
# Proxy only for VS Code Remote SSH server and its child processes
case "${BASH_EXECUTION_STRING:-} ${SSH_ORIGINAL_COMMAND:-}" in
*vscode-server*|*bootstrap-fork*|*code-server*|*remote-cli*)
if nc -z -w 1 127.0.0.1 7890 >/dev/null 2>&1; then
export HTTP_PROXY=http://127.0.0.1:7890
export HTTPS_PROXY=http://127.0.0.1:7890
export ALL_PROXY=socks5h://127.0.0.1:7891
export http_proxy="$HTTP_PROXY"
export https_proxy="$HTTPS_PROXY"
export all_proxy="$ALL_PROXY"
export NO_PROXY=localhost,127.0.0.1,::1
export no_proxy="$NO_PROXY"
printf '%s VS Code proxy enabled\n' "$(date '+%F %T')" \
>> "$HOME/.vscode-proxy.log"
else
printf '%s VS Code proxy disabled: Clash unavailable\n' \
"$(date '+%F %T')" >> "$HOME/.vscode-proxy.log"
fi
;;
esac
保存:
Ctrl+O
回车
Ctrl+X
这里有两个保护:
- 只有启动命令看起来属于 VS Code Server 时才设置代理;
- 只有
127.0.0.1:7890正在监听时才设置代理。
普通 SSH、普通终端以及服务器上的其他程序不会因此默认走代理。
3. 确认 nc 可用
command -v nc
正常会显示类似:
/usr/bin/nc
没有输出则安装:
sudo apt update
sudo apt install -y netcat-openbsd
4. 启动 Clash
sudo systemctl start clash
确认端口:
nc -zv 127.0.0.1 7890
nc -zv 127.0.0.1 7891
应该出现类似:
Connection to 127.0.0.1 7890 port [tcp/*] succeeded!
5. 真正重启 VS Code Server
只关闭 VS Code 窗口有时不会立即结束远程 Server。
在本地 VS Code 按:
Ctrl+Shift+P
执行:
Remote-SSH: Kill VS Code Server on Host
选择这台服务器,然后重新连接。
VS Code Remote SSH 会在远程机器上运行 VS Code Server,并让远程扩展在该服务器环境中执行。
6. 检查启动日志
重新连接后执行:
cat ~/.vscode-proxy.log
理想结果:
2026-07-23 12:30:00 VS Code proxy enabled
如果没有这个文件,说明 .bashrc 在该启动链路里也没有被读取。
7. 最终检查 Codex 进程
重新执行:
for pid in $(pgrep -f 'extensionHost|extension-host|codex'); do
echo "===== PID $pid ====="
tr '\0' '\n' < "/proc/$pid/environ" 2>/dev/null |
grep -iE '^(HTTP_PROXY|HTTPS_PROXY|ALL_PROXY|http_proxy|https_proxy|all_proxy)='
done
成功时,两个进程至少应显示:
HTTP_PROXY=http://127.0.0.1:7890
HTTPS_PROXY=http://127.0.0.1:7890
ALL_PROXY=socks5h://127.0.0.1:7891
然后重新尝试 Codex 的 ChatGPT 登录。Codex IDE 扩展本身支持使用 ChatGPT 账号登录。