在本地 VSCode 中使用 Codex 时,如果通过 Remote-SSH 连接 AutoDL 或其他远端服务器,常常会遇到 Codex 无法正常响应、请求中断、地区限制、stream disconnected before completion等问题。其根本原因通常是:Codex 的请求实际发生在远端服务器环境中,而服务器的网络出口并不会自动使用本地电脑已有的网络代理配置,导致远端无法稳定访问 ChatGPT/Codex 相关服务。本文以 AutoDL 租用服务器为例,完整记录如何在服务器环境中部署和使用 Codex,包括 SSH 配置文件的创建与修改、端口转发RemoteForward的作用、本地代理端口确认、远端代理环境变量配置、Codex 登录认证文件的处理,以及常见报错的排查思路。通过这些步骤,可以让远端服务器借助本地网络环境完成 Codex 的连接,从而在 VSCode Remote-SSH 场景下正常使用 Codex 辅助代码开发、实验调试和项目运行。本文适合正在使用 AutoDL、SeetaCloud 或其他云服务器进行深度学习实验,并希望在远端 VSCode 环境中稳定使用 Codex 的同学参考。
因为我日常是在AutoDL去租服务器的,所以接下来的内容,全部在此基础上进行操作的
第一步:在本机windows中去配置config文件
首先我们在此电脑这里双击,然后输入C:\Users\你的用户名\.ssh\config
举个例子,我的用户名是lucky, 那我就是下面的这种输入,然后会出现下面图片显示的内容,一定要记得在复制C:\Users\你的用户名\.ssh\config的过程中不要复制多了空格,然后我们去点击红框的部分
接着会让我们去选择应用打开,我们选择使用记事本打开
进入记事本以后,其余什么都不要修改,我们只需要加一行 RemoteForward 7890 127.0.0.1:7890 然后将红框中的端口号,改我们自己的梯子的端口号,例如如果你梯子的端口号是7879,那么这一行就是RemoteForward 7878 127.0.0.1:7878。改好后,Ctrl+s 保存一下,关闭就行了。
RemoteForward 7878 127.0.0.1:7878是 SSH 远程端口转发 配置。它的作用是在远端服务器上开一个7878端口,把访问这个端口的流量,通过 SSH 隧道转发到我们本地电脑127.0.0.1:7878。
可能一些小伙伴在config文件中会有好多服务器的配置,然后自己有点分不清楚,因为我就这样的,类似于下图这样,然后,我们只需要把这里的内容全都删掉,如果不放心可以提前备份一下,删掉以后,我们重新进入一下Vscode,然后再通过ssh连接服务器的时候就会自动去在这个config文件中增加最新的配置,就只会显示一个啦,到时候我们就可以找到自己当前使用的是哪个了,然后就是增加一行RemoteForward 7878 127.0.0.1:7878(记得改端口),然后保存。
第二步在VScode中对于远程配置进行修改
在进行完了第一步的操作以后,我们打开我们的VScode,然后通过ssh去连接到我们的服务器,进入服务器以后同时按Ctrl+Shift+P,会出现下面的内容
如果没有上面的显示的话,我们可以输入框去输入
>Preferences:Open Remote Settings (JSON)然后就可以找到了,切记不要忘了>这个符号。
接着点击第一个
接着进入下面的页面中,第一次进去,应该是空的,然后我们将下面的内容复制进去,然后进行保存退出就行,但是记得端口换成自己梯子的那个端口号。我箭头指向的地方,端口号都需要修改
{ "http.proxy": "http://127.0.0.1:7897", "http.proxySupport": "on", "http.proxyStrictSSL": false, "terminal.integrated.env.linux": { "http_proxy": "http://127.0.0.1:7890", "https_proxy": "http://127.0.0.1:7890", }, }以防大家不知道端口号在那里,下图是简单的演示
第三步在服务器上配置Codex
如果直接在服务器登录,会报错的,所以我们进行下面的操作。
1.确认一下我们本地是否部署过codex
因为我自己是没有本地部署过的,只是在我的VScode或者Pycharm中通过插件去使用的,所以我先下载了本地的codex(app下图),并且进行了登录,一定是登录过自己的chatgpt账号的才行,下图所示的这种,但是并没有生成对应的登录凭证,可能是我下载的有问题,所以只是一个exe文件,所以进行了下面的一些操作
我们同时按Win+R,然后输入cmd,记住是在cmd里进行操作,不是在powershell,不要搞错,因为两者命令有些许差别
然后输入我们的登录凭证查看的命令,这是个简单的if-else的判断,最后会输出存在/不存在。
查看登录凭证的命令:
if exist "%USERPROFILE%\.codex\auth.json" (echo auth.json 存在) else (echo auth.json 不存在)如下图所示:
3.1登录凭证显示存在我们就继续进行操作
登录凭证存在的话,我们就接着往下操作,如果不存在,请看3.2的解决方案,接下来,我们将我们的登录凭证去上传到我们的服务器端,这样就不用担心我们之前在服务登录时候的报错问题了,
首先在CMD输入下面的命令,
C:\Windows\System32\OpenSSH\scp.exe -P xxxxx "%USERPROFILE%\.codex\auth.json" root@connect.nmb1.seetacloud.com:/root/.codex/auth.json这个命令需要根据你自己的服务器的配置进行简单修改,下面是命令需要去改动的地方(红色标记的部分是需要修改的部分),首先第一个改动的xxxxx点是服务器对应的端口,以我上面提到的config文件举例,我的端口显示在port部分,这就是我们的端口号,粘过来,放到我们的命令中,然后第二个改动的connect.nmb1.seetacloud.com点就是我们的主机名称,其实在之前的config中也有,所以直接粘贴过来替换即可,其他的都不用改,
C:\Windows\System32\OpenSSH\scp.exe -Pxxxxx"%USERPROFILE%\.codex\auth.json" root@connect.nmb1.seetacloud.com:/root/.codex/auth.json
输入命令回车,然后会让我们输入服务器的密码,服务器的密码粘贴到命令行以后是不显示的黑色的,不用担心没复制进去。输入密码再进行回车,如果你的服务的root目录下有.codex文件夹,那么应该可以生成把登录凭证传上去,如果没有这个目录的话就使用以下命令先去创建一个.codex文件夹,具体命令如下,然后再进行上传的操作,这个命令中的端口号和主机名称也需要按照自己的服务器的配置进行修改
C:\Windows\System32\OpenSSH\ssh.exe -p xxxxx root@connect.nmb1.seetacloud.com "mkdir -p /root/.codex"下面的就是我们操作成功后的样子,可以看到我们的凭证已经传上去了
然后我们找到打开文件夹这里
点击打开文件夹后显示下面的内容,然后我们点击.codex文件
点击.codex文件后点击确定
接着输入服务器的密码,回车
然后然后点击红框这里新建文件,文件名字就叫做config.toml
然后将下面的内容放到文件中,然后保存文件,重新进入以下服务器,code就可以使用了
[proxy] http_proxy="http://127.0.0.1:7897" https_proxy="http://127.0.0.1:7897"3.2登录凭证不存在我们如何进行操作
登录凭证不存在,说明我们还没有真正的本地部署codex,所以在cmd输入以下的命令:
npm i -g @openai/codex输入后回车,大概率就可以部署成功了,如果没通过可以在命令行输入node -v和npm -v,看看自己的电脑是否配置了,如果没有配置的话是会出错的,输入npm i -g @openai/codex的结果是下面这样,可以参考
然后我们再输入我们的
if exist "%USERPROFILE%\.codex\auth.json" (echo auth.json 存在) else (echo auth.json 不存在)结果如下:说明我们的登录凭证有了,json文件存在了