news 2026/7/1 7:25:39

Codex CLI 服务器无痕运行教程:API Key 不落盘,退出即清理

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Codex CLI 服务器无痕运行教程:API Key 不落盘,退出即清理

Linux 终端临时运行 Codex CLI:不写配置、不保存历史、退出自动清理

前言

在服务器或容器中使用 Codex CLI 时,有时不希望执行全局安装,也不希望 API Key、配置文件、npm 缓存和 Codex 会话长期保存在系统中。

本文介绍一种临时运行方案,具有以下特点:

  • 不全局安装 Codex CLI
  • API Key 不直接写入命令行
  • API Key 不进入 Bash 历史记录
  • 不创建长期使用的~/.codex/config.toml
  • npm 缓存、Codex 配置和会话统一存放到临时目录
  • 退出 Codex 后自动删除临时文件
  • 支持自定义 OpenAI 兼容接口
  • 可选全自动执行模式

需要注意的是,这种方式只能尽量减少本地文件痕迹,并不能实现法证意义上的“完全无痕”。


一、检查 Node.js 环境

Codex CLI 可以通过 npm 和 npx 临时运行,因此需要先确认服务器已经安装 Node.js。

在 Linux 终端中执行:

node-vnpm-vnpx-v

正常情况下会分别输出 Node.js、npm 和 npx 的版本号,例如:

v20.11.1 10.2.4 10.2.4

如果出现:

node: command not found

说明当前系统尚未安装 Node.js,需要先安装 Node.js 后再继续。


二、检查临时目录空间

最开始可能会考虑使用/dev/shm,因为它通常是内存文件系统。但是很多 Docker 容器中的/dev/shm默认只有 64 MB,很容易出现空间不足。

执行:

df-h/dev/shm /tmp"$PWD"

示例输出:

Filesystem Size Used Avail Use% Mounted on shm 64M 0 64M 0% /dev/shm overlay 200G 2.2G 198G 2% / /dev/vdc 196G 5.4G 191G 3% /mnt/workspace

可以看到:

  • /dev/shm只有 64 MB,不适合下载 Codex npm 包
  • /tmp所在分区有接近 198 GB 可用空间
  • 当前工作区也有足够空间

因此,本文选择使用/tmp创建临时目录。

如果使用/dev/shm时出现以下错误:

npm ERR! code ENOSPC npm ERR! syscall write npm ERR! nospc ENOSPC: no space left on device

说明不是 npm 或 API Key 的问题,而是/dev/shm空间不足。

可以先清理之前失败创建的目录:

rm-rf/dev/shm/codex-run-*

三、进入不保存历史记录的临时 Shell

执行:

HISTFILE=/dev/nullbash--noprofile--norc

该命令会启动一个新的 Bash Shell:

  • HISTFILE=/dev/null:不将命令写入历史文件
  • --noprofile:不读取登录配置文件
  • --norc:不读取.bashrc

进入后,终端提示符可能变成:

bash-5.0$

这属于正常现象。

需要注意,关闭历史文件并不代表所有操作都绝对不会被记录。如果服务器启用了堡垒机审计、SSH 录屏、auditd或其他系统级监控,管理员仍然可能看到相关操作。


四、临时启动 Codex CLI

复制并执行下面整段脚本:

(set-Eeuopipefailumask077TMPROOT="$(mktemp-d/tmp/codex-run-XXXXXX)"cleanup(){unsetOPENAI_API_KEYrm-rf--"$TMPROOT"}trapcleanup EXIT HUP INTTERMexportTMPDIR="$TMPROOT/tmp"exportnpm_config_cache="$TMPROOT/npm-cache"exportCODEX_HOME="$TMPROOT/codex-home"mkdir-p"$TMPDIR""$npm_config_cache""$CODEX_HOME"read-rsp"请输入 API Key: "OPENAI_API_KEYprintf'\n'exportOPENAI_API_KEY npx--yes--package=@openai/codex@latest codex\-c'model_provider="proxy"'\-c'model="gpt-5.5"'\-c'review_model="gpt-5.5"'\-c'model_reasoning_effort="xhigh"'\-c'history.persistence="none"'\-c'analytics.enabled=false'\-c'model_providers.proxy.name="OpenAI Proxy"'\-c'model_providers.proxy.base_url="http://43.155.161.229:8080"'\-c'model_providers.proxy.wire_api="responses"'\-c'model_providers.proxy.env_key="OPENAI_API_KEY"')

执行后会出现:

请输入 API Key:

此时粘贴 API Key,然后按回车。

输入过程中,终端不会显示星号,也不会显示任何字符,这是read -s的正常行为。


五、脚本工作原理

1. 使用子 Shell 隔离运行环境

最外层使用:

(...)

括号中的命令会在子 Shell 中运行。

Codex 退出后,子 Shell 随之结束,内部设置的环境变量不会继续保留在外层终端中。


2. 开启严格错误处理

set-Eeuopipefail

各参数作用如下:

  • -E:让错误陷阱在函数和子 Shell 中生效
  • -e:命令执行失败时立即退出
  • -u:使用未定义变量时报错
  • -o pipefail:管道中任意命令失败时,整个管道视为失败

这样可以避免脚本在异常状态下继续执行。


3. 限制临时文件权限

umask077

这会让新创建的文件和目录默认仅当前用户可访问。

通常对应:

目录权限:700 文件权限:600

4. 创建随机临时目录

TMPROOT="$(mktemp-d/tmp/codex-run-XXXXXX)"

系统会创建类似下面的临时目录:

/tmp/codex-run-a8Kd92

随机后缀可以避免多个任务之间发生目录冲突。


5. 设置退出清理函数

cleanup(){unsetOPENAI_API_KEYrm-rf--"$TMPROOT"}

清理函数会完成两件事:

  1. 删除当前子 Shell 中的OPENAI_API_KEY
  2. 删除整个 Codex 临时目录

然后通过下面的命令注册清理行为:

trapcleanup EXIT HUP INTTERM

无论是正常退出、按Ctrl+C,还是终端收到中断信号,脚本都会尽量执行清理函数。


6. 将 npm 缓存放入临时目录

exportnpm_config_cache="$TMPROOT/npm-cache"

正常情况下,npm 会在用户目录中创建缓存,例如:

~/.npm

通过重新设置npm_config_cache,本次运行产生的 npm 缓存会被写入:

/tmp/codex-run-xxxxxx/npm-cache

退出后统一删除。


7. 将 Codex 数据放入临时目录

exportCODEX_HOME="$TMPROOT/codex-home"

Codex 的配置、状态和会话数据会被引导到临时目录,而不是默认的:

~/.codex

这样可以避免在用户主目录中长期保留 Codex 文件。


8. 安全读取 API Key

read-rsp"请输入 API Key: "OPENAI_API_KEY

参数含义:

  • -r:不处理反斜杠转义
  • -s:静默输入,不在终端显示
  • -p:显示输入提示

读取完成后执行:

exportOPENAI_API_KEY

这样 Codex 子进程可以通过环境变量读取密钥。

相比下面这种写法:

exportOPENAI_API_KEY="sk-xxxxxx"

使用read -s可以避免 API Key 直接出现在命令历史中。


9. 使用 npx 临时运行 Codex

npx--yes--package=@openai/codex@latest codex

参数说明:

  • --yes:自动确认 npm 临时安装提示
  • --package=@openai/codex@latest:临时下载最新 Codex CLI
  • codex:运行包中的 Codex 命令

这种方式不会执行:

npminstall-g@openai/codex

因此不会将 Codex 全局安装到系统。

不过,Codex 运行期间仍然需要把 npm 包下载到临时目录。退出后,该临时目录会自动删除。


六、自定义模型与代理接口

脚本中使用了自定义模型供应商:

-c'model_provider="proxy"'

并配置:

-c'model_providers.proxy.name="OpenAI Proxy"'-c'model_providers.proxy.base_url="http://43.155.161.229:8080"'-c'model_providers.proxy.wire_api="responses"'-c'model_providers.proxy.env_key="OPENAI_API_KEY"'

各项含义如下:

配置项作用
model_provider="proxy"使用名为proxy的自定义供应商
name="OpenAI Proxy"自定义供应商显示名称
base_urlOpenAI 兼容接口地址
wire_api="responses"使用 Responses API 协议
env_key="OPENAI_API_KEY"从环境变量读取 API Key

模型配置如下:

-c'model="gpt-5.5"'-c'review_model="gpt-5.5"'-c'model_reasoning_effort="xhigh"'

如果代理服务不支持这些模型名称,需要根据代理平台实际提供的模型名称进行修改。


七、关闭 Codex 本地历史记录

脚本中设置:

-c'history.persistence="none"'

用于关闭 Codex 的本地对话历史持久化。

同时设置:

-c'analytics.enabled=false'

用于关闭分析数据选项。

即使设置了这些参数,代理服务器、网络网关或服务提供方仍然可能保存请求日志,因此它们不能保证请求在服务端完全不被记录。


八、退出 Codex

可以在 Codex 中输入:

/exit

也可以按:

Ctrl+D

Codex 退出后,脚本会自动执行:

unsetOPENAI_API_KEYrm-rf--"$TMPROOT"

临时目录会被删除,例如:

/tmp/codex-run-a8Kd92

可以在外层 Shell 中检查:

ls-ld/tmp/codex-run-*

如果没有其他运行中的 Codex 临时任务,通常会显示:

ls: cannot access '/tmp/codex-run-*': No such file or directory

九、开启全自动执行模式

如果希望 Codex 执行命令时不再询问授权,可以在codex后加入:

--dangerously-bypass-approvals-and-sandbox

完整位置如下:

npx--yes--package=@openai/codex@latest codex\--dangerously-bypass-approvals-and-sandbox\-c'model_provider="proxy"'\-c'model="gpt-5.5"'\-c'review_model="gpt-5.5"'\-c'model_reasoning_effort="xhigh"'\-c'history.persistence="none"'\-c'analytics.enabled=false'\-c'model_providers.proxy.name="OpenAI Proxy"'\-c'model_providers.proxy.base_url="http://43.155.161.229:8080"'\-c'model_providers.proxy.wire_api="responses"'\-c'model_providers.proxy.env_key="OPENAI_API_KEY"'

这个参数会跳过审批和沙箱保护,Codex 可以直接:

  • 修改文件
  • 删除文件
  • 执行终端命令
  • 安装依赖
  • 运行项目脚本

因此,只建议在以下环境中使用:

  • 临时容器
  • 隔离服务器
  • 已备份项目
  • 明确信任的代码仓库

不要在包含重要文件、生产数据或敏感凭据的环境中随意启用。


十、常见问题

问题一:codex: command not found

报错:

bash: codex: command not found

原因是 Codex CLI 没有安装,或者不在PATH中。

本文使用下面的方式临时运行,因此不需要全局安装:

npx--yes--package=@openai/codex@latest codex

问题二:ENOSPC: no space left on device

报错:

npm WARN tar TAR_ENTRY_ERROR ENOSPC: no space left on device npm ERR! code ENOSPC npm ERR! syscall write

如果 npm 缓存目录位于/dev/shm,通常是因为 Docker 默认的共享内存只有 64 MB。

检查:

df-h/dev/shm /tmp

解决方法是把临时目录从:

/dev/shm

改为:

/tmp

问题三:输入 API Key 时没有显示

这是正常现象。

因为命令使用了:

read-s

输入内容不会显示在屏幕上,也不会显示星号。粘贴完成后直接按回车即可。


问题四:退出后是否真的删除了

可以检查:

find/tmp-maxdepth1-typed-name'codex-run-*'-ls

如果没有输出,说明临时目录已经删除。

不过,如果进程被强制执行kill -9,Shell 无法捕获该信号,trap可能来不及执行。此时可以手动清理:

rm-rf/tmp/codex-run-*

问题五:是否绝对不会留下任何痕迹

不能保证绝对无痕。

本文方案主要避免:

  • API Key 写入 Bash 历史
  • API Key 写入 Codex 配置文件
  • Codex 全局安装
  • npm 缓存长期保留
  • Codex 会话文件长期保留
  • 环境变量在退出后继续存在

但以下位置仍可能保存记录:

  • SSH 堡垒机
  • 终端录屏
  • Linuxauditd
  • Docker 宿主机审计
  • 网络代理日志
  • API 中转服务日志
  • 云平台操作审计
  • Shell 进程运行期间的内存
  • 服务器管理员读取的进程环境变量

因此,更准确的说法是“减少本地持久化痕迹”,而不是“完全无痕”。


十一、HTTP 接口的安全风险

示例配置使用:

http://43.155.161.229:8080

这是明文 HTTP,而不是 HTTPS。

使用 HTTP 意味着以下内容可能以明文形式在网络中传输:

  • API Key
  • 提示词
  • 项目代码片段
  • 模型返回内容
  • 文件内容
  • 终端执行上下文

建议将接口部署为:

https://your-domain.example.com

并配置有效的 TLS 证书。

如果只能使用 HTTP,应确保它运行在可信的内网、VPN 或加密隧道中,并明确了解其中风险。


十二、完整操作流程总结

第一步:检查环境

node-vnpm-vnpx-v

第二步:检查磁盘空间

df-h/dev/shm /tmp"$PWD"

第三步:进入无历史临时 Shell

HISTFILE=/dev/nullbash--noprofile--norc

第四步:执行临时运行脚本

(set-Eeuopipefailumask077TMPROOT="$(mktemp-d/tmp/codex-run-XXXXXX)"cleanup(){unsetOPENAI_API_KEYrm-rf--"$TMPROOT"}trapcleanup EXIT HUP INTTERMexportTMPDIR="$TMPROOT/tmp"exportnpm_config_cache="$TMPROOT/npm-cache"exportCODEX_HOME="$TMPROOT/codex-home"mkdir-p"$TMPDIR""$npm_config_cache""$CODEX_HOME"read-rsp"请输入 API Key: "OPENAI_API_KEYprintf'\n'exportOPENAI_API_KEY npx--yes--package=@openai/codex@latest codex\-c'model_provider="proxy"'\-c'model="gpt-5.5"'\-c'review_model="gpt-5.5"'\-c'model_reasoning_effort="xhigh"'\-c'history.persistence="none"'\-c'analytics.enabled=false'\-c'model_providers.proxy.name="OpenAI Proxy"'\-c'model_providers.proxy.base_url="http://43.155.161.229:8080"'\-c'model_providers.proxy.wire_api="responses"'\-c'model_providers.proxy.env_key="OPENAI_API_KEY"')

第五步:退出

在 Codex 中输入:

/exit

或者按:

Ctrl+D

脚本会自动清除 API Key,并删除本次运行产生的临时目录。


结语

通过npx、临时 Shell、CODEX_HOME、npm 临时缓存和trap清理机制,可以在 Linux 服务器或 Docker 容器中临时运行 Codex CLI,同时尽量减少本地持久化文件。

该方案适用于:

  • 临时服务器
  • Docker 容器
  • 公共计算节点
  • 不能全局安装软件的环境
  • 希望退出后自动清理的开发场景

不过,安全性不仅取决于本地文件,还取决于网络传输、代理服务、服务器审计和平台日志。生产环境中应优先使用 HTTPS、短期密钥、最小权限和可信代理服务。


文章标签

Linux Codex OpenAI Node.js npm npx Docker 服务器 AI编程 命令行工具
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/7/1 7:23:08

Hirebotics推出无代码防爆协作机器人,专为工业喷涂设计

协作机器人解决方案提供商Hirebotics宣布推出首款防爆协作机器人解决方案——Cobot Painter,该产品基于其无代码Beacon平台,并搭载发那科CRX-10iA/L Paint硬件构建而成。Cobot Painter目前已正式上市,为金属制造商提供一种灵活实用的高混合、…

作者头像 李华
网站建设 2026/7/1 7:21:18

保姆级教程:用CANoe 17.2.88的Easy实例,5分钟搞懂汽车总线数据模拟

零基础5分钟实战:用CANoe Easy实例解锁汽车总线模拟第一次打开CANoe软件时,满屏的英文界面和专业术语确实容易让人望而生畏。作为汽车电子领域最常用的总线开发测试工具,CANoe的强大功能背后是陡峭的学习曲线。但别担心,Vector官方…

作者头像 李华
网站建设 2026/7/1 7:21:06

NTN卫星通信实战:手把手教你理解SSB波束配置与R17协议限制

NTN卫星通信实战:SSB波束配置与R17协议限制深度解析当卫星通信遇上5G NR协议,SSB波束配置成为系统设计中最关键的参数之一。对于参与NTN项目的工程师而言,理解不同频段下SSB波束数量与子载波间隔的配置逻辑,以及R17协议64个波束限…

作者头像 李华
网站建设 2026/7/1 7:16:13

用CodeBuddy玩游戏摸鱼指南

文章目录写在前面玩法一:自己造游戏,想玩啥造啥写在前面 CodeBuddy 这个家伙吧,表面上是你的效率搭档,实际上你让它帮你摸鱼,它比你还来劲。今天不聊正经干活的事儿,专门说说怎么用 CodeBuddy 光明正大&am…

作者头像 李华
网站建设 2026/7/1 7:11:29

考研数学二复习别踩坑:武忠祥强化讲义里那些容易忽略的细节(函数与极限篇)

考研数学二函数与极限避坑指南:武忠祥强化讲义中90%考生忽略的致命细节函数篇:那些你以为理解实则踩坑的概念陷阱复合函数定义域的隐形炸弹武忠祥强化讲义P6例题1揭示的复合函数定义域问题,每年考场错误率高达67%。考生常误以为只要外层函数定…

作者头像 李华