Codex 在 VS Code + ModelArts 场景下的登录与配置总结

Codex 在 VS Code + ModelArts 场景下的登录与配置总结

1. 目标

本次配置的目标是:

  • 本机 Windows + VS Code 中完成 Codex 登录
  • ModelArts Notebook / Remote-SSH 场景下,让 Codex 相关请求能够通过本机代理转发访问外网
  • 在远端环境中安装并使用 codex CLI
  • 最终打通 VS Code 插件 / 远端 CLI / 代理链路 / SSH 配置 这几部分

2. 主要问题与处理过程

2.1 VS Code Remote-SSH 无法连接新版本 VS Code Server

远端日志显示:

  • 远端系统是 EulerOS 2.0 (SP8)
  • libstdc++ 最高只有 GLIBCXX_3.4.24
  • 新版 VS Code Server 需要更高版本(如 GLIBCXX_3.4.25+

因此处理方式是:

  • 保留新版 VS Code 用于 Codex
  • 额外安装一个 旧版 VS Code 1.98.x Portable
  • 专门用旧版连接 ModelArts

2.2 旧版 VS Code 和新版 VS Code 的 SSH 配置互相覆盖

原因:

  • 两个 VS Code 实例如果共用同一个 ~/.ssh/config,或者共用同一份用户设置,就会互相影响

解决方式:

  • 给旧版 VS Code 单独准备一个 SSH 配置文件,例如:
text 复制代码
C:\Users\24385\.ssh\config-modelarts
  • 在旧版 VS Code 中设置:
json 复制代码
{
  "remote.SSH.configFile": "C:\\Users\\24385\\.ssh\\config-modelarts"
}

这样旧版只会读 config-modelarts,新版继续使用默认 config


2.3 本机 Codex 登录过程中遇到 1455 端口占用

执行:

powershell 复制代码
codex login

报错:

  • Port 127.0.0.1:1455 is already in use

解决方式:

改用设备码登录:

powershell 复制代码
codex login --device-auth

这样就不依赖本地 1455 浏览器回调端口。


2.4 本机 Codex 登录成功,但远端/插件仍然异常

后来发现:

  • 旧版本 Codex CLI(如 v0.46.0)太旧
  • 并且还存在自定义 API 地址覆盖问题,例如请求被发到了:
text 复制代码
https://api.mczbc.cn/v1/responses

这说明不是在走默认官方 OpenAI 端点,而是某个代理或自定义 base URL 配置覆盖了请求。

处理方式:

  • 升级 Codex CLI 到较新版本(如 0.125.0
  • 检查并清理 OPENAI_* 相关环境变量
  • 检查 ~/.codex/config.toml 是否配置了自定义 openai_base_url

2.5 ModelArts 远端安装 Codex 时出现只读文件系统问题

执行:

bash 复制代码
npm install -g @openai/codex

报错:

  • EROFS: read-only file system

原因:

  • ModelArts 环境中的全局 npm 安装目录不可写

解决方式:

改为安装到用户目录:

bash 复制代码
mkdir -p ~/.local/codex
npm install -g @openai/codex --prefix ~/.local/codex

然后将 Codex 可执行目录加入 PATH

bash 复制代码
export PATH="$HOME/.local/codex/bin:$PATH"
codex --version

如果执行 codex --version 成功,说明实际上已经安装好了,只是之前 shell 找不到命令。

为了永久生效,再写入:

bash 复制代码
echo 'export PATH="$HOME/.local/codex/bin:$PATH"' >> ~/.bashrc
source ~/.bashrc

2.6 新环境中 codex 命令找不到

虽然 ~/.codex 目录存在,但这并不代表 Codex 已经安装。

需要区分:

  • ~/.codex:配置/认证/缓存目录
  • ~/.local/codex/bin/codex:真正的可执行文件

处理方式:

bash 复制代码
ls -l ~/.local/codex/bin
find ~/.local -name codex 2>/dev/null
echo $PATH

如果安装目录里有 codex,但命令找不到,就执行:

bash 复制代码
export PATH="$HOME/.local/codex/bin:$PATH"

2.7 远端 codex login --device-auth 报 403

在 ModelArts 上执行:

bash 复制代码
codex login --device-auth

返回:

  • 403 Forbidden

这通常表示:

  • 远端 device-code 登录路径不可用
  • 或服务端不接受当前环境的 device-code 登录

后续采用的思路是:

  • 先在本机完成登录
  • 再把本机的 Codex 凭据文件复制到远端

2.8 将本机 auth.json 复制到远端

先在远端创建目录:

powershell 复制代码
ssh -F C:\Users\24385\.ssh\config-modelarts ModelArts-notebook-b828 "mkdir -p ~/.codex"

再复制本机认证文件:

powershell 复制代码
scp -F C:\Users\24385\.ssh\config-modelarts $HOME\.codex\auth.json ModelArts-notebook-b828:~/.codex/auth.json

含义:

  • 第一句:登录到远端并创建 ~/.codex
  • 第二句:把本机 C:\Users\24385\.codex\auth.json 复制到远端 ~/.codex/auth.json

需要注意:

  • -F 表示指定读取 config-modelarts
  • 否则 PowerShell 中的 ssh/scp 只会默认读取 C:\Users\24385\.ssh\config
  • 这也是之前出现 "Could not resolve hostname ..." 的原因

2.9 配置 SSH 反向端口转发,让远端借用本机代理

config-modelarts 中添加:

ssh 复制代码
Host ModelArts-notebook-b828
    HostName dev-XXXX
    Port 31851
    User ma-user
    IdentityFile C:/XXXX
    StrictHostKeyChecking no
    UserKnownHostsFile NUL
    ForwardAgent yes
    RemoteForward 10240 127.0.0.1:7897

含义:

  • 在远端打开 127.0.0.1:10240
  • 实际流量经 SSH 回到本机 127.0.0.1:7897
  • 本机 7897 是 Clash Verge 的代理端口

2.10 为什么感觉 10240 没生效

后续排查发现:

远端执行:

bash 复制代码
env | grep -i proxy

显示默认仍然是:

text 复制代码
HTTP_PROXY=http://proxy-notebook.modelarts.com:8083
HTTPS_PROXY=http://proxy-notebook.modelarts.com:8083

说明:

  • 你的 SSH RemoteForward 10240 -> 7897 很可能已经建立
  • 但远端 shell 默认仍然优先使用 ModelArts 自带的代理 8083
  • 所以看起来像"10240 没生效"

真正验证方式应该是显式指定代理:

bash 复制代码
curl -I https://chatgpt.com -x http://127.0.0.1:10240
curl -I https://chatgpt.com/backend-api/wham/apps -x http://127.0.0.1:10240

结果显示:

  • chatgpt.com 首页返回 403 cf-mitigated: challenge
  • backend-api/wham/apps 返回 405 Method Not Allowed,并带有 x-oai-request-id

这实际上是成功结果,说明:

  • 请求已经通过 127.0.0.1:10240
  • 再通过本机 7897
  • 成功到达了 OpenAI / ChatGPT 后端接口

其中:

  • 403 首页挑战:说明 Cloudflare 不让 curl 直接访问首页
  • 405 对接口:说明接口通了,只是 -I 发的是 HEAD,而该接口要求 POST

因此最终确认:

RemoteForward 10240 127.0.0.1:7897 已经生效


2.11 VS Code 里的 Http: Proxy = http://127.0.0.1:10240 为什么看起来"没生效"

这个设置主要作用于:

  • VS Code 自己的网络请求
  • 部分走 VS Code 网络层的扩展

不会自动覆盖远端终端里的:

  • curl
  • npm
  • pip
  • codex
  • 其他 shell 命令

所以要让终端默认走 10240,还需要手工切换环境变量:

bash 复制代码
unset http_proxy https_proxy HTTP_PROXY HTTPS_PROXY ALL_PROXY all_proxy ftp_proxy FTP_PROXY

export HTTP_PROXY=http://127.0.0.1:10240
export HTTPS_PROXY=http://127.0.0.1:10240
export http_proxy=http://127.0.0.1:10240
export https_proxy=http://127.0.0.1:10240

如果希望 npm 也使用这条链路,还可以补上:

bash 复制代码
npm config set proxy http://127.0.0.1:10240
npm config set https-proxy http://127.0.0.1:10240

3. 本次配置中最关键的命令

3.1 本机登录 Codex

powershell 复制代码
codex logout
codex login --device-auth

3.2 查询 Codex 版本和安装位置

powershell 复制代码
codex --version
where.exe codex
Get-ChildItem Env:OPENAI*

3.3 远端用户目录安装 Codex

bash 复制代码
mkdir -p ~/.local/codex
npm install -g @openai/codex --prefix ~/.local/codex
export PATH="$HOME/.local/codex/bin:$PATH"
codex --version

3.4 永久加入 PATH

bash 复制代码
echo 'export PATH="$HOME/.local/codex/bin:$PATH"' >> ~/.bashrc
source ~/.bashrc

3.5 检查代理变量

bash 复制代码
env | grep -i proxy

3.6 显式测试 SSH 转发代理是否通到 ChatGPT

bash 复制代码
curl -I https://chatgpt.com -x http://127.0.0.1:10240
curl -I https://chatgpt.com/backend-api/wham/apps -x http://127.0.0.1:10240

3.7 在远端手工切换到自己的代理

bash 复制代码
unset http_proxy https_proxy HTTP_PROXY HTTPS_PROXY ALL_PROXY all_proxy ftp_proxy FTP_PROXY

export HTTP_PROXY=http://127.0.0.1:10240
export HTTPS_PROXY=http://127.0.0.1:10240
export http_proxy=http://127.0.0.1:10240
export https_proxy=http://127.0.0.1:10240

3.8 给 npm 单独设置代理

bash 复制代码
npm config set proxy http://127.0.0.1:10240
npm config set https-proxy http://127.0.0.1:10240

3.9 本机凭据同步到远端

powershell 复制代码
ssh -F C:\Users\24385\.ssh\config-modelarts ModelArts-notebook-b828 "mkdir -p ~/.codex"
scp -F C:\Users\24385\.ssh\config-modelarts $HOME\.codex\auth.json ModelArts-notebook-b828:~/.codex/auth.json

3.10 旧版 VS Code 与新版隔离 SSH 配置

旧版 VS Code 的 settings.json

json 复制代码
{
  "remote.SSH.configFile": "C:\\Users\\24385\\.ssh\\config-modelarts"
}

4. 最终结论

本次成功路径本质上是:

  1. 本机先完成 Codex 登录
  2. 旧版 VS Code 专门负责连接 ModelArts
  3. 远端 Codex 通过用户目录安装
  4. 通过 SSH RemoteForward 将远端 10240 转发到本机 Clash 7897
  5. curl -x http://127.0.0.1:10240 验证链路通到 ChatGPT/OpenAI 后端
  6. 必要时把本机 auth.json 复制到远端
  7. 区分 VS Code 代理设置与 shell 环境变量代理的作用范围

一句话总结:

本次并不是单纯"登录一下 Codex",而是同时打通了 本机登录、旧版 VS Code、Remote-SSH、SSH 反向代理、远端 Codex 安装、环境变量 PATH、以及终端/插件代理链路 这几部分,最终让 Codex 在 VS Code + ModelArts 场景下可用。

相关推荐
飞鸿踏雪(蓝屏选手)4 小时前
137 ≤ Chrome 主密钥获取研究
c++·chrome·windows·网络安全·逆向分析
Waay5 小时前
Linux Shell 知识点考评(一):grep 文本搜索(附答案)
linux·运维·服务器
jamon_tan5 小时前
Linux下串口RAW模式设置
linux
碧海银沙音频科技研究院6 小时前
基于VMware虚拟机ubuntu开发博通BK7258方法
linux·运维·ubuntu
阿虎儿8 小时前
[实战记录] Windows 11 远程桌面已开启,但 3389 端口无监听?终极排查与修复
windows
云边有个稻草人8 小时前
【Linux系统】进程地址空间
linux·虚拟地址空间·进程地址空间·虚拟地址空间是怎么实现的?·为什么要有虚拟地址空间?·怎么理解虚拟地址空间?
谁似人间西林客10 小时前
工厂大脑如何让汽车制造告别“救火式”运维?
运维·汽车·制造
飞飞传输11 小时前
数字化科研提速关键 构建安全可控一体化跨网数据传输体系
大数据·运维·安全
wanhengidc11 小时前
服务器中带宽的重要性
运维·服务器·网络·安全·web安全