精彩内容马上呈现...
BI1SZB

在vscode中为ubuntu远控服务器安装codex并登录

在远控终端输入

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_PROXYHTTPS_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

这里有两个保护:

  1. 只有启动命令看起来属于 VS Code Server 时才设置代理;
  2. 只有 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 账号登录。

分享到