在公司服务器上通过 VS Code Remote-SSH 使用 Codex 的代理配置指南
这份文档给初次配置服务器的同事使用。目标是让大家理解并完成下面这件事:
text
在本地电脑用 VS Code 连接公司服务器时,
让服务器上的 VS Code 插件、Codex、Claude、终端命令等,
尽量都先通过 SSH 隧道回到本机代理,
再从本机代理访问外网。
本文分成两部分:
text
Fundamental / 基础原理
解释为什么会出现"终端能联网,VS Code 插件不能联网"。
这部分偏底层,是理解问题的关键。
Operation / 操作步骤
直接告诉你改哪些文件、在哪台机器上改、每个文件写什么、怎么检查。
这部分按步骤照做即可。
本文不会使用任何具体员工、机器或真实端口信息。示例里统一使用占位符:
text
<SERVER_ALIAS> VS Code SSH 配置里的服务器别名,例如 company-gpu-01
<SERVER_HOSTNAME> 服务器真实域名或 IP
<SSH_PORT> SSH 端口
<USERNAME> 你在服务器上的 Linux 用户名
<LOCAL_PROXY_PORT> 本机代理端口,例如本机 Clash 的 HTTP 代理端口
<REMOTE_PROXY_PORT> 服务器上暴露出来的反向转发端口
最终希望得到的网络路径是:
text
服务器上的 VS Code / Codex / 插件 / 终端
-> 服务器 127.0.0.1:<REMOTE_PROXY_PORT>
-> SSH 反向转发
-> 本机 127.0.0.1:<LOCAL_PROXY_PORT>
-> 本机 Clash / 其他代理软件
-> 外网
不要直接复制别人的真实端口。请使用团队约定的端口,或者选择一个未被占用的普通用户端口。一般来说,普通用户端口应大于 1024。
Part 1. Fundamental / 基础原理
1. 常见现象
在公司服务器上使用 VS Code Remote-SSH 时,经常出现这种情况:
text
远端终端里 curl / git / pip / npm 可以联网。
但是 VS Code 插件、Codex、Claude、ChatGPT 插件无法联网。
很多人会误以为:
text
终端能联网 = VS Code 插件也应该能联网
这是错的。
原因是:
text
VS Code 远程终端
和
VS Code 远程插件
不是同一个进程,也不一定读取同一批配置文件。
所以只把代理写进 shell 配置文件,往往只能修好终端,修不好插件。
2. VS Code Remote-SSH 到底启动了什么
当你在本地 VS Code 里连接远程服务器时,结构大致是这样:
text
本地 VS Code 窗口
|
| SSH 连接
v
服务器上的 sshd
|
v
服务器上的 VS Code Server
|
+-- server-main.js
|
+-- extensionHost
| |
| +-- 远端 VS Code 插件
| |
| +-- Codex app-server
| +-- Claude 进程
| +-- ChatGPT 插件进程
|
+-- ptyHost
|
+-- VS Code 集成终端 shell
|
+-- bash / zsh / fish
这里最重要的是两条路径:
text
集成终端:
VS Code Server -> ptyHost -> bash / zsh
插件:
VS Code Server -> extensionHost -> 插件进程
终端 shell 通常会读取这些文件:
text
~/.bashrc
~/.bash_profile
~/.profile
~/.zshrc
但 extensionHost 通常不是由交互式 shell 启动的,所以它不一定读取:
text
~/.bashrc
因此,如果你只在 ~/.bashrc 里写:
bash
export HTTP_PROXY=http://127.0.0.1:<REMOTE_PROXY_PORT>
export HTTPS_PROXY=http://127.0.0.1:<REMOTE_PROXY_PORT>
那么可能出现:
text
终端 shell 有代理。
Codex 插件没有代理。
这就是"终端能通信,插件不能通信"的核心原因。
3. 127.0.0.1 到底是谁
127.0.0.1 永远表示"当前这台机器自己"。
也就是说:
text
在你的本地电脑上:
127.0.0.1:<LOCAL_PROXY_PORT>
表示你本机上的代理软件。
在公司服务器上:
127.0.0.1:<LOCAL_PROXY_PORT>
表示服务器自己,不是你的电脑。
所以,服务器上的 VS Code 插件不能直接写:
text
http://127.0.0.1:<LOCAL_PROXY_PORT>
因为服务器上的 127.0.0.1 不是你的本机。
正确做法是:
text
在服务器上开一个本地端口:
127.0.0.1:<REMOTE_PROXY_PORT>
再通过 SSH 把它转发回你的本机:
127.0.0.1:<LOCAL_PROXY_PORT>
这样服务器上的程序访问:
text
http://127.0.0.1:<REMOTE_PROXY_PORT>
实际就会走到:
text
你本机的 127.0.0.1:<LOCAL_PROXY_PORT>
4. SSH RemoteForward 是什么
这里用到的是 SSH 的反向端口转发:
text
RemoteForward
在本地 SSH 配置里写:
sshconfig
RemoteForward <REMOTE_PROXY_PORT> 127.0.0.1:<LOCAL_PROXY_PORT>
它的意思是:
text
在服务器上监听:
127.0.0.1:<REMOTE_PROXY_PORT>
收到请求后,通过 SSH 连接转回本地:
127.0.0.1:<LOCAL_PROXY_PORT>
也就是:
text
服务器 127.0.0.1:<REMOTE_PROXY_PORT>
-> SSH 隧道
-> 本机 127.0.0.1:<LOCAL_PROXY_PORT>
推荐只绑定服务器的本地回环地址:
text
127.0.0.1:<REMOTE_PROXY_PORT>
不要绑定成:
text
0.0.0.0:<REMOTE_PROXY_PORT>
区别是:
text
127.0.0.1
只有服务器自己能访问这个端口。
0.0.0.0
可能让其他机器也能访问这个端口。
正常情况下,RemoteForward 代理端口应该只给服务器本机上的你的程序使用,不应该开放给其他机器。
5. 为什么要设置 HTTP_PROXY / HTTPS_PROXY / ALL_PROXY
很多命令行工具、Node 程序、Python 程序、插件子进程,会读取这些环境变量:
text
HTTP_PROXY
HTTPS_PROXY
ALL_PROXY
NO_PROXY
也有些程序读取小写版本:
text
http_proxy
https_proxy
all_proxy
no_proxy
因此,远端推荐同时设置大小写两套:
text
HTTP_PROXY=http://127.0.0.1:<REMOTE_PROXY_PORT>
HTTPS_PROXY=http://127.0.0.1:<REMOTE_PROXY_PORT>
ALL_PROXY=http://127.0.0.1:<REMOTE_PROXY_PORT>
http_proxy=http://127.0.0.1:<REMOTE_PROXY_PORT>
https_proxy=http://127.0.0.1:<REMOTE_PROXY_PORT>
all_proxy=http://127.0.0.1:<REMOTE_PROXY_PORT>
NO_PROXY=localhost,127.0.0.1,::1
no_proxy=localhost,127.0.0.1,::1
其中 NO_PROXY 很重要。
它的意思是:
text
访问 localhost、127.0.0.1、::1 时,不要走代理。
这样可以避免本地回环请求被错误地送进代理,导致本机服务互相访问异常。
6. VS Code 还有自己的代理配置
除了环境变量之外,VS Code 还有自己的 HTTP 代理配置。
Remote-SSH 的远端配置文件通常在:
text
~/.vscode-server/data/Machine/settings.json
推荐写:
json
{
"http.proxy": "http://127.0.0.1:<REMOTE_PROXY_PORT>",
"http.proxySupport": "override",
"http.proxyStrictSSL": true
}
含义:
text
http.proxy
告诉远端 VS Code 使用哪个代理。
http.proxySupport = override
尽量使用这个显式配置的代理,而不是自动探测出来的其他代理。
http.proxyStrictSSL = true
保持严格 TLS 证书校验。
除非公司明确提供了特殊证书方案,否则不要随便改成 false。
这一步是为了让 VS Code 自己的网络请求也更稳定地使用代理。
7. 为什么改完必须重启 VS Code Server
环境变量只会在进程启动时继承。
假设旧的 VS Code Server 已经启动了,然后你才修改:
text
~/.pam_environment
~/.config/environment.d/60-vscode-ssh-proxy.conf
~/.bashrc
~/.vscode-server/data/Machine/settings.json
旧进程不会自动获得新的环境变量。
这时必须让 VS Code Server 重新启动。
在本地 VS Code 命令面板里运行:
text
Remote-SSH: Kill VS Code Server on Host...
注意:
text
这里的三个点 ... 不是要你输入的参数。
它只是 VS Code 菜单里的显示习惯,表示后面还会让你选择服务器。
搜索时输入:
text
Kill VS Code Server on Host
然后选择对应服务器即可。
这个操作不会重启服务器,也不会影响其他 Linux 用户。它只会杀掉当前用户在那台服务器上的 VS Code Server 相关进程。
8. 这个方案的安全边界
这个方案能做到:
text
VS Code Remote-SSH 相关进程
Codex 插件
Claude 插件
ChatGPT 插件
VS Code 集成终端
大多数尊重代理变量的命令行工具
都优先走:
text
服务器 127.0.0.1:<REMOTE_PROXY_PORT>
-> SSH 隧道
-> 本机代理
如果你关机、断开 SSH、或者本机代理关闭,那么服务器上的:
text
127.0.0.1:<REMOTE_PROXY_PORT>
会不可用。已经配置为使用这个代理的程序会连接失败。
这是一种比较安全的"应用层代理"方案。
但是它不是系统级防火墙。
也就是说,如果某个程序完全不看:
text
HTTP_PROXY
HTTPS_PROXY
ALL_PROXY
并且它自己直接建立 TCP 连接,那么只靠 VS Code 和 SSH 配置不能 100% 拦住它。
如果公司要求:
text
某个 Linux 用户的所有进程都绝对不能直接出网
那需要管理员做系统层限制,例如:
text
按 UID 设置防火墙规则
网络命名空间
容器 egress policy
公司统一出口代理策略
这些通常需要 root 权限,不属于普通 VS Code 用户配置。
Part 2. Operation / 操作步骤
下面开始照着做。
请先分清楚:
text
本地电脑
你的笔记本或台式机,运行 VS Code 和 Clash / 其他代理软件。
远端服务器
公司服务器,运行 VS Code Server、Codex 插件、训练脚本等。
本文会明确标出每一步在哪台机器上做。
Step 0. 确认两个端口
需要确认两个端口:
text
<LOCAL_PROXY_PORT>
本地电脑代理软件的端口。
例如 Clash 的 HTTP 代理端口。
<REMOTE_PROXY_PORT>
服务器上用来接收代理请求的端口。
服务器上的 VS Code、Codex、终端都会连接这个端口。
它们的关系是:
text
服务器 127.0.0.1:<REMOTE_PROXY_PORT>
-> SSH RemoteForward
-> 本机 127.0.0.1:<LOCAL_PROXY_PORT>
注意:
text
远端插件使用 <REMOTE_PROXY_PORT>。
本地 VS Code 使用 <LOCAL_PROXY_PORT>。
不要搞反。
Step 1. 在本地电脑修改 SSH 配置
修改本地电脑上的 SSH config。
常见路径:
text
macOS / Linux:
~/.ssh/config
Windows:
C:\Users\<YOUR_WINDOWS_USER>\.ssh\config
如果你有多个 VS Code 用户配置或多个 VS Code Profile,请确认修改的是 Remote-SSH 真正在用的那个 SSH 配置。
找到目标服务器对应的 Host 块,写成类似这样:
sshconfig
Host <SERVER_ALIAS>
HostName <SERVER_HOSTNAME>
User <USERNAME>
Port <SSH_PORT>
RemoteForward <REMOTE_PROXY_PORT> 127.0.0.1:<LOCAL_PROXY_PORT>
ExitOnForwardFailure yes
每一行含义:
text
Host
VS Code 里显示或选择的服务器别名。
HostName
真实服务器地址。
User
你的服务器用户名。
Port
SSH 端口。
RemoteForward
在服务器上开 <REMOTE_PROXY_PORT>,
并把它转发到本机 <LOCAL_PROXY_PORT>。
ExitOnForwardFailure yes
如果反向转发失败,SSH 直接失败。
这样可以避免"VS Code 连上了,但代理没建起来"的半坏状态。
不要写成:
sshconfig
RemoteForward 0.0.0.0:<REMOTE_PROXY_PORT> 127.0.0.1:<LOCAL_PROXY_PORT>
除非你非常明确知道自己在开放一个服务器端口给其他机器访问。普通使用不需要这样做。
Step 2. 在远端服务器修改登录环境变量
在服务器上修改:
text
~/.pam_environment
如果文件不存在,可以创建。
加入:
text
# >>> vscode-remote-ssh-local-proxy >>>
HTTP_PROXY DEFAULT=http://127.0.0.1:<REMOTE_PROXY_PORT>
HTTPS_PROXY DEFAULT=http://127.0.0.1:<REMOTE_PROXY_PORT>
ALL_PROXY DEFAULT=http://127.0.0.1:<REMOTE_PROXY_PORT>
http_proxy DEFAULT=http://127.0.0.1:<REMOTE_PROXY_PORT>
https_proxy DEFAULT=http://127.0.0.1:<REMOTE_PROXY_PORT>
all_proxy DEFAULT=http://127.0.0.1:<REMOTE_PROXY_PORT>
NO_PROXY DEFAULT=localhost,127.0.0.1,::1
no_proxy DEFAULT=localhost,127.0.0.1,::1
# <<< vscode-remote-ssh-local-proxy <<<
注意:
text
~/.pam_environment 不是 shell 脚本。
这里不要写 export。
这里用的是 PAM 环境变量语法。
为什么要改这个文件:
text
它可能在 SSH 登录会话创建时被读取。
目标是让 VS Code Server 启动时就能继承代理变量。
Step 3. 在远端服务器修改 environment.d 配置
在服务器上创建目录:
bash
mkdir -p ~/.config/environment.d
创建或修改:
text
~/.config/environment.d/60-vscode-ssh-proxy.conf
写入:
text
HTTP_PROXY=http://127.0.0.1:<REMOTE_PROXY_PORT>
HTTPS_PROXY=http://127.0.0.1:<REMOTE_PROXY_PORT>
ALL_PROXY=http://127.0.0.1:<REMOTE_PROXY_PORT>
http_proxy=http://127.0.0.1:<REMOTE_PROXY_PORT>
https_proxy=http://127.0.0.1:<REMOTE_PROXY_PORT>
all_proxy=http://127.0.0.1:<REMOTE_PROXY_PORT>
NO_PROXY=localhost,127.0.0.1,::1
no_proxy=localhost,127.0.0.1,::1
注意:
text
这个文件使用普通 VAR=value 语法。
这里也不要写 export。
这里也不要写 DEFAULT=。
为什么要改这个文件:
text
有些 Linux 用户会话和用户级服务会读取 ~/.config/environment.d/*.conf。
它是给环境变量多加一条启动路径。
Step 4. 在远端服务器修改 shell 启动文件
如果服务器默认 shell 是 bash,修改:
text
~/.bashrc
加入:
bash
# >>> vscode-remote-ssh-local-proxy >>>
if [ -n "${SSH_CONNECTION:-}" ]; then
export HTTP_PROXY="http://127.0.0.1:<REMOTE_PROXY_PORT>"
export HTTPS_PROXY="http://127.0.0.1:<REMOTE_PROXY_PORT>"
export ALL_PROXY="http://127.0.0.1:<REMOTE_PROXY_PORT>"
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"
fi
# <<< vscode-remote-ssh-local-proxy <<<
为什么要改这个文件:
text
它让 VS Code 集成终端和你手动运行的命令也使用同一个代理。
但是要记住:
text
只改 ~/.bashrc 不够。
因为插件不一定读取 ~/.bashrc。
Step 5. 在远端服务器修改 VS Code Machine settings
创建目录:
bash
mkdir -p ~/.vscode-server/data/Machine
创建或修改:
text
~/.vscode-server/data/Machine/settings.json
写入或合并以下配置:
json
{
"http.proxy": "http://127.0.0.1:<REMOTE_PROXY_PORT>",
"http.proxySupport": "override",
"http.proxyStrictSSL": true
}
如果文件里已经有其他配置,不要直接覆盖整个文件。应该把这三项合并进去。
为什么要改这个文件:
text
这是远端 VS Code Server 的 Machine 级配置。
它和你本地 VS Code 的 User settings 不是同一个文件。
非常容易混淆的一点:
text
本地 VS Code User settings:
应该使用本机代理端口 <LOCAL_PROXY_PORT>。
远端 VS Code Machine settings:
应该使用服务器上的反向转发端口 <REMOTE_PROXY_PORT>。
Step 6. 可选:修改本地 VS Code User settings
这一步只影响本地 VS Code 自己发出的请求。
如果你的本地 VS Code 也需要走代理,可以在本地 VS Code User settings 里设置:
json
{
"http.proxy": "http://127.0.0.1:<LOCAL_PROXY_PORT>",
"http.proxySupport": "override",
"http.proxyStrictSSL": true
}
注意:
text
这里使用 <LOCAL_PROXY_PORT>。
不要写 <REMOTE_PROXY_PORT>。
因为这是本地 VS Code 配置,本地的 127.0.0.1 指的是你的电脑。
Step 7. 重启远端 VS Code Server
改完上面的文件后,必须重启远端 VS Code Server。
在本地 VS Code 里:
text
Ctrl+Shift+P
搜索:
text
Kill VS Code Server on Host
选择:
text
Remote-SSH: Kill VS Code Server on Host...
然后选择:
text
<SERVER_ALIAS>
说明:
text
三个点 ... 不是要输入的内容。
它只是 VS Code 命令名字的一部分,表示后续会弹出选择框。
这个操作会影响:
text
你自己在这台服务器上的 VS Code Remote-SSH server。
你自己当前连接这台服务器的 VS Code 窗口。
你自己 VS Code 里开的远端终端和远端插件。
这个操作不会影响:
text
其他 Linux 用户。
整台服务器。
系统 sshd 服务。
服务器上的操作系统。
执行完后,重新通过 VS Code Remote-SSH 连接服务器。
Step 8. 检查服务器上的反向转发端口
在远端服务器上运行:
bash
ss -ltnp | grep '<REMOTE_PROXY_PORT>'
期望看到类似:
text
LISTEN 0 128 127.0.0.1:<REMOTE_PROXY_PORT> 0.0.0.0:*
好结果:
text
127.0.0.1:<REMOTE_PROXY_PORT>
风险较大的结果:
text
0.0.0.0:<REMOTE_PROXY_PORT>
如果什么都没有,说明 SSH 反向转发没有建立。回去检查本地 SSH config:
text
RemoteForward <REMOTE_PROXY_PORT> 127.0.0.1:<LOCAL_PROXY_PORT>
ExitOnForwardFailure yes
然后重新连接。
Step 9. 检查远端终端环境变量
在远端服务器终端运行:
bash
env | grep -i proxy
期望看到:
text
HTTP_PROXY=http://127.0.0.1:<REMOTE_PROXY_PORT>
HTTPS_PROXY=http://127.0.0.1:<REMOTE_PROXY_PORT>
ALL_PROXY=http://127.0.0.1:<REMOTE_PROXY_PORT>
NO_PROXY=localhost,127.0.0.1,::1
如果终端没有这些变量,检查:
text
~/.bashrc
~/.pam_environment
~/.config/environment.d/60-vscode-ssh-proxy.conf
然后重开终端或重新连接 VS Code。
Step 10. 检查 VS Code 插件进程环境变量
在远端服务器上列出相关进程:
bash
pgrep -a -u "$USER" -f 'vscode|code-server|codex|chatgpt|claude|node'
重点找这些进程:
text
server-main.js
extensionHost
ptyHost
codex app-server
claude
拿到 PID 后检查:
bash
tr '\0' '\n' < /proc/<PID>/environ | grep -i proxy
期望这些关键进程都能看到:
text
HTTP_PROXY=http://127.0.0.1:<REMOTE_PROXY_PORT>
HTTPS_PROXY=http://127.0.0.1:<REMOTE_PROXY_PORT>
ALL_PROXY=http://127.0.0.1:<REMOTE_PROXY_PORT>
NO_PROXY=localhost,127.0.0.1,::1
如果终端有代理,但 extensionHost 没有代理,通常说明:
text
VS Code Server 是旧进程,还没有重启。
解决方式:
text
Remote-SSH: Kill VS Code Server on Host...
然后重新连接。
Step 11. 用 curl 测试 OpenAI 连通性
在远端服务器运行:
bash
curl -I --max-time 12 \
-x http://127.0.0.1:<REMOTE_PROXY_PORT> \
https://api.openai.com/v1/models
如果看到:
text
HTTP/1.1 200 Connection established
HTTP/2 401
这是成功的网络形态。
解释:
text
HTTP/1.1 200 Connection established
说明代理隧道建立成功。
HTTP/2 401
说明请求已经到达 OpenAI API。
401 是因为测试请求没有带 API token。
这不是网络失败。
常见失败:
text
Connection refused
服务器上的 <REMOTE_PROXY_PORT> 没有监听。
Connection timed out
SSH 隧道或本机代理不可用。
Could not resolve host
DNS 或代理路由有问题。
Part 3. 需要修改哪些文件
这一节只列文件路径,方便检查。
本地电脑需要修改
1. 本地 SSH config
路径通常是:
text
macOS / Linux:
~/.ssh/config
Windows:
C:\Users\<YOUR_WINDOWS_USER>\.ssh\config
加入或修改:
sshconfig
Host <SERVER_ALIAS>
HostName <SERVER_HOSTNAME>
User <USERNAME>
Port <SSH_PORT>
RemoteForward <REMOTE_PROXY_PORT> 127.0.0.1:<LOCAL_PROXY_PORT>
ExitOnForwardFailure yes
2. 可选:本地 VS Code User settings
这是本地 VS Code 配置,不是远端配置。
写:
json
{
"http.proxy": "http://127.0.0.1:<LOCAL_PROXY_PORT>",
"http.proxySupport": "override",
"http.proxyStrictSSL": true
}
远端服务器需要修改
1. ~/.pam_environment
写 PAM 格式:
text
HTTP_PROXY DEFAULT=http://127.0.0.1:<REMOTE_PROXY_PORT>
HTTPS_PROXY DEFAULT=http://127.0.0.1:<REMOTE_PROXY_PORT>
ALL_PROXY DEFAULT=http://127.0.0.1:<REMOTE_PROXY_PORT>
http_proxy DEFAULT=http://127.0.0.1:<REMOTE_PROXY_PORT>
https_proxy DEFAULT=http://127.0.0.1:<REMOTE_PROXY_PORT>
all_proxy DEFAULT=http://127.0.0.1:<REMOTE_PROXY_PORT>
NO_PROXY DEFAULT=localhost,127.0.0.1,::1
no_proxy DEFAULT=localhost,127.0.0.1,::1
不要写 export。
2. ~/.config/environment.d/60-vscode-ssh-proxy.conf
写普通环境变量格式:
text
HTTP_PROXY=http://127.0.0.1:<REMOTE_PROXY_PORT>
HTTPS_PROXY=http://127.0.0.1:<REMOTE_PROXY_PORT>
ALL_PROXY=http://127.0.0.1:<REMOTE_PROXY_PORT>
http_proxy=http://127.0.0.1:<REMOTE_PROXY_PORT>
https_proxy=http://127.0.0.1:<REMOTE_PROXY_PORT>
all_proxy=http://127.0.0.1:<REMOTE_PROXY_PORT>
NO_PROXY=localhost,127.0.0.1,::1
no_proxy=localhost,127.0.0.1,::1
不要写 export,也不要写 DEFAULT=。
3. ~/.bashrc
写 shell 格式:
bash
export HTTP_PROXY="http://127.0.0.1:<REMOTE_PROXY_PORT>"
export HTTPS_PROXY="http://127.0.0.1:<REMOTE_PROXY_PORT>"
export ALL_PROXY="http://127.0.0.1:<REMOTE_PROXY_PORT>"
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"
4. ~/.vscode-server/data/Machine/settings.json
写 JSON 格式:
json
{
"http.proxy": "http://127.0.0.1:<REMOTE_PROXY_PORT>",
"http.proxySupport": "override",
"http.proxyStrictSSL": true
}
如果已有其他配置,要合并,不要覆盖。
Part 4. 最终检查清单
配置完成后,逐项检查:
text
[ ] 本地 SSH config 有 RemoteForward。
[ ] 本地 SSH config 有 ExitOnForwardFailure yes。
[ ] 远端 ~/.pam_environment 有代理变量。
[ ] 远端 ~/.config/environment.d/60-vscode-ssh-proxy.conf 有代理变量。
[ ] 远端 ~/.bashrc 有代理变量。
[ ] 远端 ~/.vscode-server/data/Machine/settings.json 有 http.proxy 设置。
[ ] 已执行 Remote-SSH: Kill VS Code Server on Host...
[ ] 已重新连接服务器。
[ ] ss 能看到 127.0.0.1:<REMOTE_PROXY_PORT> 正在监听。
[ ] env | grep -i proxy 能看到代理变量。
[ ] VS Code extensionHost 进程有代理变量。
[ ] Codex app-server 进程有代理变量。
[ ] curl 通过远端代理能连接 api.openai.com。
全部通过后,远端 Codex 的网络路径应当是:
text
Codex / VS Code 远端插件
-> 服务器 127.0.0.1:<REMOTE_PROXY_PORT>
-> SSH 反向转发
-> 本机 127.0.0.1:<LOCAL_PROXY_PORT>
-> 本机代理软件
-> 外网
Part 5. 一句话总结
这个问题的根因是:
text
VS Code 远端终端和 VS Code 远端插件不是同一个启动链路。
终端能读到 ~/.bashrc,不代表插件也能读到。
正确修法是:
text
本地 SSH config 负责建立 RemoteForward。
远端登录环境负责让 VS Code Server 启动时继承代理。
远端 shell 配置负责让终端继承代理。
远端 VS Code Machine settings 负责让 VS Code 自己使用代理。
最后必须重启 VS Code Server,让新配置进入进程环境。