Codex SSH 连接远程 Ubuntu:从密码登录到密钥登录、安装远端 Codex、解决“未登录”
Codex SSH 连接远程 Ubuntu:从密码登录到密钥登录、安装远端 Codex、解决“未登录”的完整踩坑记录
前言
最近在给 Codex Desktop 添加一台远程 Ubuntu 服务器时,遇到了一串看似不相关、实际层层递进的问题:
- OpenSSH 提示
Permission denied (publickey,password) - Codex 添加 SSH 连接时没有用户名和密码输入框
- 连接后提示“此远程计算机上未安装 Codex”
- 安装完成后又提示“你当前未登录”
这篇文章记录一次完整排障过程。重点不是“命令大全”,而是把每个错误背后的原因讲清楚,方便以后遇到同类问题快速定位。
说明:本文所有 IP、账号、密码、API Key 都建议替换成自己的真实信息。不要把真实密码、私钥、API Key 写进公开文章。
环境信息
本地环境:
Windows 11
OpenSSH_for_Windows_9.5p2
Codex Desktop
远端环境:
Ubuntu 24.04 LTS
root 用户
SSH 端口 22
示例连接信息:
显示名称:广州 | 广州三区
主机:<你的服务器 IP>
端口:22
用户名:root
问题一:OpenSSH 提示 Permission denied
一开始直接用 Windows OpenSSH 测试:
ssh root@<你的服务器 IP>
结果报错:
Permission denied (publickey,password).
但是同一台服务器,用 iShellPro 输入用户名和密码可以正常登录。
这个现象很容易误判为“密码错了”。但这里真正的问题是:Codex Desktop 的 SSH 连接不等同于 iShellPro 的密码登录配置。Codex 更依赖系统 OpenSSH 能否直接连通,而不是读取 iShellPro 里保存的密码。
关键结论:Codex SSH 连接更适合用密钥登录
在 Codex Desktop 的“添加 SSH 连接”界面里,如果没有看到用户名和密码输入框,不是操作错了,而是它当前更偏向使用系统 SSH 配置。
也就是说,建议先让下面这条命令能在本机直接成功:
ssh <ssh别名>
而不是依赖某个独立 SSH 客户端保存的密码。
第一步:在本机生成专用 SSH 密钥
在 Windows 上生成一把专门给 Codex 用的密钥:
ssh-keygen -t ed25519 -f "$env:USERPROFILE\.ssh\codex_gz3_ed25519" -N '""' -C "codex-gz3"
生成后会得到两个文件:
C:\Users\<你的用户名>\.ssh\codex_gz3_ed25519
C:\Users\<你的用户名>\.ssh\codex_gz3_ed25519.pub
其中 .pub 是公钥,可以放到服务器上;没有 .pub 后缀的是私钥,不能泄露。
查看公钥:
Get-Content "$env:USERPROFILE\.ssh\codex_gz3_ed25519.pub"
第二步:把公钥加入服务器 authorized_keys
用 iShellPro 先通过密码登录服务器,然后执行:
mkdir -p ~/.ssh
chmod 700 ~/.ssh
echo '<这里替换成你的 ssh-ed25519 公钥>' >> ~/.ssh/authorized_keys
chmod 600 ~/.ssh/authorized_keys
注意:只粘贴公钥,不要粘贴私钥。
第三步:配置 Windows OpenSSH 别名
编辑本机:
C:\Users\<你的用户名>\.ssh\config
添加:
Host gz-gz3
HostName <你的服务器 IP>
Port 22
User root
IdentityFile ~/.ssh/codex_gz3_ed25519
IdentitiesOnly yes
然后验证:
ssh gz-gz3 "echo codex_alias_ok"
如果输出:
codex_alias_ok
说明本机到远端的 SSH 密钥登录已经打通。
此时在 Codex Desktop 添加 SSH 连接时,可以使用:
显示名称:广州 | 广州三区
主机:gz-gz3
问题二:提示“此远程计算机上未安装 Codex”
SSH 打通后,Codex Desktop 可能会继续提示:
此远程计算机上未安装 Codex
这说明 SSH 已经进入下一阶段了:远端服务器缺少 Codex CLI / app-server。
先登录远端检查:
command -v codex || true
command -v node || true
command -v npm || true
如果没有 Node/npm,先安装:
apt-get update
apt-get install -y nodejs npm
然后安装 Codex CLI:
npm install -g @openai/codex@latest
codex --version
第四步:为远端安装 Codex app-server 所需结构
Codex Desktop 远程连接需要远端有可启动的 app-server。执行:
codex app-server daemon bootstrap
如果提示:
managed standalone Codex install not found
通常说明远端缺少 standalone 路径。官方安装脚本可用时,可以执行:
curl -fsSL https://chatgpt.com/codex/install.sh | sh
如果服务器网络访问 chatgpt.com 不通,但 npm 包已经安装成功,可以把 npm 包自带的 Linux 原生 Codex 二进制链接到 standalone 预期位置:
mkdir -p /root/.codex/packages/standalone/current
ln -sf /usr/local/lib/node_modules/@openai/codex/node_modules/@openai/codex-linux-x64/vendor/x86_64-unknown-linux-musl/bin/codex /root/.codex/packages/standalone/current/codex
再执行:
codex app-server daemon bootstrap
codex app-server daemon version
看到类似输出即可:
{
"status": "running",
"appServerVersion": "0.138.0"
}
问题三:提示“你当前未登录”
远端 Codex 安装完成后,Codex Desktop 又可能提示:
你当前未登录
登录 Codex
这说明远端 Codex 环境没有认证信息。
可以在远端执行:
codex doctor --summary
如果看到:
auth no Codex credentials were found
就需要给远端配置登录态。
如果你本机 Codex 已经使用 API Key 登录,可以把本机的 auth.json 同步到远端:
scp "$env:USERPROFILE\.codex\auth.json" gz-gz3:/root/.codex/auth.json
然后根据你的本机配置,给远端写一个最小化配置:
model = "codex-auto-review"
model_provider = "custom"
model_reasoning_effort = "high"
[model_providers.custom]
name = "custom"
wire_api = "responses"
requires_openai_auth = true
base_url = "https://你的模型服务地址"
保存到:
/root/.codex/config.toml
设置权限:
chmod 600 /root/.codex/auth.json /root/.codex/config.toml
重启远端 app-server:
codex app-server daemon restart
再次检查:
codex doctor --summary
最终看到:
18 ok · 0 warn · 0 fail ok
说明远端 Codex 已经配置完成。
问题四:远端已经登录,但 Codex Desktop 仍显示未登录
这个坑比较隐蔽。
如果你在同步认证文件之前已经点过 Codex Desktop 的 SSH 连接,远端可能已经启动了一个旧的桌面连接进程。它会继续保持旧状态,所以即使远端 doctor 已经全绿,桌面端还可能显示“未登录”。
可以在远端查看:
ps -ef | grep codex | grep -v grep
如果看到类似:
desktop-ssh-websocket-v0.sock
可以清理旧连接进程:
pkill -f 'desktop-ssh-websocket-v0.sock' || true
rm -f /root/.codex/app-server-control/desktop-ssh-websocket-v0.sock
然后回到 Codex Desktop,重新连接 SSH 主机。
最终验证清单
本机验证:
ssh gz-gz3 "echo ok"
远端验证:
codex --version
codex app-server daemon version
codex doctor --summary
理想结果:
SSH 正常
Codex CLI 正常
app-server running
doctor 0 fail
经验总结
这次排障最大的经验有四条:
- iShellPro 能密码登录,不代表 Codex Desktop 能直接复用它的密码。
- Codex SSH 连接优先把系统 OpenSSH 配置打通,推荐使用密钥登录。
- “未安装 Codex”说明 SSH 已经成功进入远端,只是远端缺少 Codex CLI/app-server。
- “你当前未登录”通常是远端
/root/.codex/auth.json或config.toml没配好,也可能是旧桌面连接进程缓存了旧状态。
遇到问题时,不要只看 Codex Desktop 的提示,最好同时在远端执行:
codex doctor --summary
这个命令能快速判断问题到底出在安装、认证、网络,还是 app-server。
结语
Codex SSH 远程连接的核心链路可以概括为:
本机 OpenSSH 密钥登录成功
-> 远端安装 Codex CLI
-> 远端 app-server bootstrap 成功
-> 远端 auth/config 配置成功
-> Codex Desktop 重新连接
只要按这条链路逐层验证,基本就能定位大多数 Codex SSH 远程连接问题。
更多推荐




所有评论(0)