在 Linux 服务器上安装 Claude Code 与 ChatGPT Codex:分步指南

发布于 更新于 阅读时间 22 分钟

从全新安装的 Debian 或 Ubuntu 到可以投入使用的 AI 智能体:用户与 sudo 白名单、Node.js 22、Claude Code、Codex CLI 和 Gemini CLI 的安装与登录、规则文件、cron 任务、最初的任务以及常见错误。

本指南带您从一台刚装好的 Debian 或 Ubuntu 服务器开始,搭建出一个可以投入使用的 AI 智能体:它能分析日志、检查配置并执行维护任务。我们将配置 Claude Code(Anthropic)和 Codex CLI(OpenAI,即 ChatGPT 背后的命令行工具),两者都运行在一个权限受限的专用用户下,此外还会介绍第三种选择 Gemini CLI(Google)。所有命令都在装有 Debian 13 和 Ubuntu 24.04 的 KernelHost KVM 根服务器上实际运行过。AI 托管服务器的基本概念以及有哪些架构可供选择,请参阅文章 AI 托管服务器:安全接入 AI 智能体。

截至 2026 年 9 月。这些工具更新很快;如有疑问,请用 claude --help、codex --help 或 gemini --help 核对参数。

前提条件

  • 一台装有 Debian 12 或 13、或者 Ubuntu 22.04 或 24.04 的根服务器,并可通过 SSH 以 root 身份访问。在 AlmaLinux 和 Rocky Linux 上步骤相同,只是软件包命令用 dnf 而不是 apt。
  • 已完成基础加固:SSH 密钥登录、防火墙、自动安全更新。新根服务器检查清单涵盖了这些内容。
  • 一个 Anthropic 账户(Claude Pro、Max 或 Team)或 API 密钥,以及一个 ChatGPT 账户(Plus、Pro 或 Team)或 OpenAI API 密钥。如果您只想配置一个工具,只需准备其中相应的一项。
  • 允许向 api.anthropic.com 和 api.openai.com 发起出站 HTTPS 连接。KernelHost 服务器默认即已放行;如果您自己配置了严格的防火墙,则必须允许这些连接。

什么样的服务器足以运行 AI 智能体?

AI 智能体在服务器上不需要特殊硬件,也不需要 GPU,因为语言模型运行在服务商那里。服务器上只运行命令行工具和 Node.js,一次会话期间两者合计通常只占用几百兆字节内存。如果服务器上没有运行太多其他服务,2 vCPU 和 4 GB 内存就足够了。如果服务器同时还承载网站、数据库或游戏服务器,请为智能体预留约 1 GB 内存。KernelHost 的 KVM 根服务器约 30 秒即可开通,按 PrePaid 预付费模式计费,没有最低合约期,因此也很适合用作测试系统,先在上面试用智能体。

第 1 步:创建专用用户并限制 sudo

智能体绝不以 root 身份运行。它拥有自己的账户,并通过 sudo 白名单获得它恰好需要的那些命令。请从少量只读命令开始,只有当某项任务确实需要时,再扩展这份列表。

sudo adduser --disabled-password --gecos "KI-Agent" aiagent
sudo tee /etc/sudoers.d/aiagent >/dev/null <<'EOF'
aiagent ALL=(root) NOPASSWD: /usr/bin/journalctl *, /usr/bin/systemctl status *, /usr/bin/systemctl restart nginx, /usr/bin/apt-get update, /usr/bin/apt-get upgrade -y, /usr/bin/tail *, /usr/bin/df *, /usr/bin/ss *
EOF
sudo chmod 440 /etc/sudoers.d/aiagent
sudo visudo -cf /etc/sudoers.d/aiagent

最后一行用于检查语法。sudoers 文件中的一个错误就可能让所有人都无法使用 sudo,因此这一步检查必不可少。--disabled-password 确保任何人都无法用密码以 aiagent 身份登录;之后您可以用 sudo -iu aiagent 切换到该账户。sudo 用户的基本工作原理,请参阅文章 在 Linux 下创建 sudo 用户。

有针对性地授予写权限,而不是通过 sudo 开放编辑器

如果智能体需要修改 /etc 下的文件,不要通过 sudo 为它开放 nano(那样它就能编辑任何文件,包括 /etc/sudoers),而应使用用户组和有针对性的写权限,例如 setfacl -m u:aiagent:rw /etc/nginx/sites-available/meine-seite.conf。起步阶段,完全可以只让智能体提出修改建议,再由您来执行。

白名单中带通配符的命令也是同样的道理。/usr/bin/tail * 允许智能体读取 root 能访问的任何文件,包括含有访问凭据的文件。如果您不希望这样,就把允许的路径完整写出来,例如 /usr/bin/tail -n 200 /var/log/nginx/error.log。

第 2 步:安装 Node.js 22

这两个工具都基于 Node.js 运行。Claude Code 至少需要版本 18,Codex CLI 至少需要版本 22,因此我们安装 22 LTS。Debian 12 软件源提供的版本太旧;NodeSource 提供的是当前版本:

curl -fsSL https://deb.nodesource.com/setup_22.x | sudo -E bash -
sudo apt-get install -y nodejs
node --version
npm --version

无需 root 权限的替代方案:nvm

如果您不想以 root 权限运行来自互联网的脚本,可以在智能体用户的主目录中使用 nvm;这样整个过程完全不需要 root 权限。nvm 的安装命令请从该项目的 README 中获取,之后只需三行命令:

nvm install 22
nvm alias default 22
node --version

详细信息和其他安装方式,请参阅 在 Debian 上安装 Node.js 的指南。

第 3 步:安装 Claude Code 并登录

从这里开始,我们在智能体的账户中操作:

sudo -iu aiagent
curl -fsSL https://claude.ai/install.sh | bash
claude --version

原生安装程序会把 Claude Code 安装到 ~/.local/bin 下,并自动保持更新。也可以通过 npm 用 npm install -g @anthropic-ai/claude-code 安装;如果安装时报 EACCES 错误,请参阅下文的故障排除部分。

在没有浏览器的服务器上登录

首次启动 claude 时,该工具会要求您登录。使用 Claude 账户时,它通常会打开浏览器;在没有浏览器的服务器上,它会显示一个地址和一个代码,您在笔记本电脑或手机上确认即可。此后,这次登录对这台服务器上的这个用户一直有效,直到您退出登录。

用于脚本和 cron 任务的 API 密钥

对于脚本和 cron 任务,API 密钥是更好的选择:

echo 'export ANTHROPIC_API_KEY="sk-ant-..."' >> ~/.bashrc
chmod 600 ~/.bashrc
source ~/.bashrc
claude -p "只回复 OK" 

这样,密钥只保存在智能体用户的主目录中,其他用户无法读取。请在 Anthropic 控制台中创建这个密钥,并为它设置月度支出上限,这样即使某个会话失控,也不会产生高昂费用。密钥本身绝不要写进交给智能体的任务里,也绝不要写进需要它输出的文件中。

第 4 步:为服务器配置 Claude Code

规则文件 CLAUDE.md

Claude Code 启动时会读取当前目录下的 CLAUDE.md 文件。其中写有适用于每个会话的规则。请在智能体的主目录中创建一个工作目录,并在其中放入这个文件:

mkdir -p ~/server && cd ~/server
cat > CLAUDE.md <<'EOF'
# 本服务器的规则
- 这是一台生产服务器(Debian 13、nginx、PHP-FPM、MariaDB)。
- 只读命令(journalctl、systemctl status、tail、df、ss)随时都可以执行。
- 执行任何写入命令之前,先简要说明它会改动什么,并等待批准。
- 绝不卸载软件包,绝不删除 /var/lib 下的文件,绝不创建或删除用户。
- 绝不在输出中复述密码、密钥和客户数据。
- 每项任务结束时,用三句话给出总结。
EOF

这个文件会随着使用不断充实。每当智能体的做法与您的期望不符时,就把纠正写成一条新规则加进去。几周之后,它就能相当准确地反映出您服务器上的工作方式。

settings.json 中的白名单

此外还需要一份工具白名单,让 Claude Code 无需询问即可执行只读命令,其他一切操作则先请求批准。文件 ~/.claude/settings.json 对该用户生效:

mkdir -p ~/.claude
cat > ~/.claude/settings.json <<'EOF'
{
  "permissions": {
    "allow": [
      "Bash(sudo journalctl:*)",
      "Bash(sudo systemctl status:*)",
      "Bash(sudo tail:*)",
      "Bash(df:*)",
      "Bash(free:*)",
      "Bash(ss:*)"
    ],
    "deny": [
      "Bash(rm -rf:*)",
      "Bash(sudo rm:*)",
      "Bash(dd:*)",
      "Bash(mkfs:*)"
    ]
  }
}
EOF

deny 列表只是一张额外的安全网,而不是一堵墙:同一条命令可以有很多种写法。真正的边界由第 1 步中的 sudo 白名单划定,因为该用户无权执行的操作,智能体同样无权执行。

以交互方式执行第一个任务

现在来执行第一个任务,以交互方式进行:

cd ~/server && claude
> 汇总 journalctl 中过去 24 小时的错误,并列出最常见的三个原因。

通过 cron 任务无人值守运行

同样的任务也可以无人值守地运行,例如作为每天早上 7 点执行的 cron 任务,结果通过电子邮件发送:

0 7 * * * cd /home/aiagent/server && /home/aiagent/.local/bin/claude -p "汇总 journalctl 中过去 24 小时的错误和警告。列出服务、时间和可能的原因。" --allowedTools "Bash(sudo journalctl:*)" 2>&1 | mail -s "服务器每日报告" admin@example.com

参数 -p 让 Claude Code 在没有交互式会话的情况下启动,--allowedTools 把可用工具严格限制在本次运行所需的范围内。写入操作不应出现在无人值守的运行中。cron 任务的基本设置方法,请参阅文章 在 Linux 下设置 cron 任务。

第 5 步:安装 Codex CLI(ChatGPT)并登录

安装与登录

Codex CLI 是 OpenAI 的工具,它把 ChatGPT 背后的模型带到了命令行中。在同一个用户账户下安装:

npm install -g @openai/codex
codex --version

登录使用 ChatGPT 账户(Plus、Pro 或 Team):启动 codex,选择“Sign in with ChatGPT”,然后在一台有浏览器的设备上打开显示的地址。对于脚本,请改为设置一个来自 OpenAI 平台的 API 密钥:

echo 'export OPENAI_API_KEY="sk-..."' >> ~/.bashrc
source ~/.bashrc

config.toml 中的沙箱与审批模式

Codex 自带沙箱和审批模式。两者都在 ~/.codex/config.toml 中设置;对于生产服务器,下面这个组合比较合理:

mkdir -p ~/.codex
cat > ~/.codex/config.toml <<'EOF'
approval_policy = "on-request"
sandbox_mode = "workspace-write"
EOF

workspace-write 只允许在当前工作目录中写入,on-request 则让智能体对超出这一范围的一切操作先请求许可。danger-full-access 级别会同时取消这两项限制,不应出现在生产系统上。

AGENTS.md 中的规则

与 CLAUDE.md 类似的规则,Codex 会从工作目录中的 AGENTS.md 文件读取;您可以使用相同的内容:

cp ~/server/CLAUDE.md ~/server/AGENTS.md
cd ~/server && codex "检查所有已启用的 systemd 服务是否都在运行,并列出失败的服务及其最后一条错误信息。"

对于无人值守的运行,可以用 codex exec "Aufgabe" 传入任务,它相当于 claude -p。

第 6 步:第三种选择 Gemini CLI

Gemini CLI 是 Google 推出的命令行工具,遵循同样的工作原理。它同样基于 Node.js 运行,并安装在同一个用户账户下:

npm install -g @google/gemini-cli
gemini --version

首次启动 gemini 时,您需要用 Google 账户登录;对于脚本,请在环境变量 GEMINI_API_KEY 中设置 API 密钥。Gemini CLI 从工作目录中的 GEMINI.md 文件读取规则,这里同样可以沿用 CLAUDE.md 的内容。无人值守的运行可以用 gemini -p "Aufgabe" 传入任务来启动。三款工具中选择哪一款,主要取决于您已经拥有哪个账户:三者在服务器上的工作方式相同,您也可以同时运行多款。

替代方案:智能体在您的电脑上运行,通过 SSH 工作

如果您不想在服务器上安装任何东西,可以在笔记本电脑上启动 Claude Code 或 Codex,让智能体通过 SSH 发出命令。为此,要在服务器上为智能体用户配置一个专用 SSH 密钥,并在 CLAUDE.md 中写明规则:所有服务器命令前都要加上 ssh aiagent@server。这种方式很适合偶尔的维护,但较长的任务和 cron 任务还是直接在服务器上运行更好。使用专用密钥、主机别名和审批机制的 SSH 连接具体是什么样子,以及智能体随后按照什么流程在生产系统上部署,请参阅实践报告 将 AI 连接到服务器。

第 7 步:加固并设定限制

  • 快照或备份要在每一次会做出改动的会话之前完成。服务器备份策略一文介绍了如何让这一过程自动运行。
  • 保持审批模式开启。Claude Code 的 --dangerously-skip-permissions 和 Codex 的 danger-full-access 是为用完即弃的虚拟机准备的。
  • 机密放在访问范围之外。智能体用户不得有权读取 .env 文件、数据库密码和客户数据。它读到的一切都会发送给服务商。
  • 费用上限要在服务商的控制台中为每个 API 密钥分别设置。
  • 可追溯性:安装 etckeeper,让 /etc 下的每一次变更都记录到 Git 中,并保存好智能体的总结。
  • 入站方向无需任何改动。两个工具都只需要出站 HTTPS。防火墙、Fail2ban 和主机商的 DDoS 防护都保持不变。

第一批任务:五条实用的指令

最适合起步的任务,是那些需要大量阅读、却没有任何风险的任务。它们能很快显示出智能体工作得有多细致,而且能立即带来收益:

  • 日志报告:“汇总过去 24 小时的错误和警告,按服务分组,并给出可能的原因。”
  • 检查服务:“列出所有失败的 systemd 服务及其最后一条错误信息,并逐一说明应当如何处理。不要做任何改动。”
  • 磁盘空间:“显示占用空间最多的目录,并建议哪些内容可以安全清理。”相关背景请参阅文章 Linux 下磁盘已满。
  • 更新:“哪些软件包有待安装的安全更新,更新后又需要重启哪些服务?”
  • Web 服务器:“检查 nginx 配置中的错误和过时设置,并逐一解释发现的问题。”

只有当这些分析结果准确可靠之后,才值得把会改动系统的任务交给智能体,而且要先在测试系统上进行。

常见错误与解决方法

提示信息原因与解决方法
EACCES: permission denied(执行 npm install -g 时)npm 试图写入系统目录。设置用户前缀:npm config set prefix ~/.npm-global,然后把 export PATH=~/.npm-global/bin:$PATH 写入 ~/.bashrc,再重新安装。
Node.js version ... is not supported使用的是发行版软件源中过旧的版本。重复第 2 步,并用 node --version 确认当前生效的是 22.x。
claude: command not found原生安装程序把程序放在 ~/.local/bin 下,而该目录尚未加入 PATH。把 export PATH=$HOME/.local/bin:$PATH 写入 ~/.bashrc,然后重新加载 Shell。
登录时没有打开浏览器在服务器上这属于正常现象。在另一台设备上打开显示的地址并输入代码,或者改用 API 密钥。
启动时出现 ECONNREFUSED 或超时出站 HTTPS 被阻止。检查防火墙中针对出站 443 端口的规则;KernelHost 服务器的出站流量默认不受限制。
429 rate limit 或 overloaded订阅或 API 的配额已用完,或者服务商当前负载过高。稍等片刻,并让无人值守的运行在几分钟后自动重试一次。
智能体每条命令都要询问扩展 ~/.claude/settings.json 中的白名单,或相应调整 approval_policy(位于 config.toml 中),但只对只读命令放宽。
cron 任务发出的邮件是空的cron 中没有 Shell 的环境变量。请在 crontab 中设置 API 密钥,或者在任务会读取的环境文件中设置,并使用程序的完整路径。

让工具保持最新

通过原生安装程序安装后,Claude Code 会自动更新。通过 npm 安装的工具,用一条命令即可更新到最新版本:

npm update -g @openai/codex @google/gemini-cli
codex --version
gemini --version

新版本偶尔会更改参数或默认设置。更新之后,请先快速浏览一下更新说明,再让无人值守的运行继续执行,并检查下一份每日报告中有无异常。

结论

在服务器上配置一个 AI 智能体,一小时就能完成:用户、sudo 白名单、Node.js、工具、规则。真正的功夫在于边界,而这里的边界是刻意收紧的。请在某项任务确有需要时逐步放宽,绝不一次性全面放开。在 KernelHost KVM 根服务器或独立服务器上,为此无需开通任何功能:root 访问权限、自由选择发行版和出站连接都是标配。

智能体之后如何在生产系统上部署,包括备份、回退方案和审批,请参阅实践报告 将 AI 连接到服务器。

要点总结

  • Claude Code、Codex CLI 和 Gemini CLI 可在任何装有 Node.js 22 的 Linux 服务器上运行,不需要 GPU。
  • 智能体拥有带 sudo 白名单的专用用户,绝不以 root 身份运行。
  • 规则写在 CLAUDE.md、AGENTS.md 或 GEMINI.md 中,只读命令放进白名单,其他一切操作都需要批准。
  • 对于 cron 任务和脚本,带支出上限的 API 密钥是规范的做法,无人值守的运行只执行只读操作。
  • 每次会话前备份,机密放在访问范围之外,审批模式保持开启。
  • KernelHost 服务器默认即提供 root 访问权限、自由选择发行版和出站连接。

常见问题

使用 Claude Code 需要订阅吗,还是有 API 密钥就够了?
两种方式都可以。使用 Claude 账户(Pro、Max 或 Team)时,您在首次启动时通过浏览器登录;在没有浏览器的服务器上,则通过另一台设备上的代码登录。对于无人在场的自动化任务,把 API 密钥放在环境变量 ANTHROPIC_API_KEY 中是更规范的做法,因为它不绑定到某个人,并且可以用预算设定上限。
在没有浏览器的服务器上,如何登录 Codex CLI?
要么用 ChatGPT 账户登录,这时 Codex 会显示一个地址,您在笔记本电脑或手机上打开即可;要么通过环境变量 OPENAI_API_KEY 使用来自 OpenAI 平台的密钥。对于 cron 任务和脚本,API 密钥是更可靠的方式。
我需要哪个版本的 Node.js?
Claude Code 至少需要 Node.js 18,Codex CLI 至少需要 Node.js 22。因此请直接安装 Node.js 22 LTS,可以通过 NodeSource 仓库安装,也可以在智能体用户的主目录中用 nvm 安装。Debian 12 软件源中的版本太旧。安装完成后,请用 node --version 检查当前生效的是哪个版本:如果该命令显示的仍是较旧的主版本,说明发行版自带的版本在 PATH 中排得更靠前。
为什么 npm install -g 会报 EACCES 错误?
因为 npm 在全局安装时要写入一个系统目录,而该用户对这个目录没有权限。请用 npm config set prefix ~/.npm-global 设置用户前缀,把 ~/.npm-global/bin 加入 PATH,然后重新安装。也可以改用 nvm;对于 Claude Code,还可以使用不依赖 npm 的原生安装程序。
可以在 cron 任务中运行 Claude Code 吗?
可以,使用 claude -p,以文本形式传入任务,并提供允许使用的工具白名单。为此请使用 API 密钥,把工具限制为只读命令,并把输出重定向到文件或电子邮件。会改动系统的操作不应放进无人值守的运行中。
这在 KernelHost 的 Windows 服务器上也能运行吗?
可以。Claude Code 和 Codex CLI 可以借助 Node.js 在 Windows 上原生运行,也可以在适用于 Linux 的 Windows 子系统中运行。在那里,关于用户和 sudo 白名单的步骤,对应的是一个没有管理员权限的专用 Windows 用户。KernelHost 的 Windows Server 采用 Bring Your Own License(自带许可证)模式,关于审批、备份和机密的规则在 Windows 上与在 Linux 下同样适用。
可以在一台服务器上同时使用 Claude Code、Codex CLI 和 Gemini CLI 吗?
可以。这三款工具可以在同一个用户账户中并行运行,使用的也是相同的权限。每款工具都读取工作目录中各自的规则文件:Claude Code 读取 CLAUDE.md,Codex CLI 读取 AGENTS.md,Gemini CLI 读取 GEMINI.md。最简单的做法是只维护一份内容,然后复制到这三个文件中。使用哪款工具,通常取决于您已经拥有哪个账户。
AI 智能体在服务器上需要多少内存?
很少,因为语言模型运行在服务商那里。命令行工具和 Node.js 在一次会话期间通常只占用几百兆字节。如果服务器上没有运行太多其他服务,2 vCPU 和 4 GB 内存就足够了。如果同时还运行着网站、数据库或游戏服务器,请为智能体预留约 1 GB 内存。不需要 GPU。
如何更新 Claude Code、Codex CLI 和 Gemini CLI?
通过原生安装程序安装后,Claude Code 会自动更新。Codex CLI 和 Gemini CLI 可以用 npm update -g @openai/codex @google/gemini-cli 更新到最新版本,之后再用 codex --version 和 gemini --version 检查版本。更新之后,请先阅读更新说明,再让无人值守的运行继续执行,因为参数可能会有变化。
如何在服务器上配置 Gemini CLI?
在智能体用户的账户中运行 npm install -g @google/gemini-cli,然后启动 gemini,用 Google 账户登录;如果用于脚本,则在环境变量 GEMINI_API_KEY 中设置 API 密钥。Gemini CLI 从工作目录中的 GEMINI.md 文件读取规则,无人值守的运行用 gemini -p 启动,并以文本形式传入任务。
为什么 AI 智能体不能以 root 身份运行?
因为一个误解了指令的智能体如果拥有 root 权限,最坏情况下会损坏整台服务器,例如执行一条错误的删除命令。有了专用用户和 sudo 白名单,它只能执行您明确允许的命令。这样一来,可能造成的损害就被限制在这些命令的范围内,而且在日志中随时都能看出智能体做了什么。

Claude Code Codex CLI Gemini CLI ChatGPT AI 智能体 Node.js Debian Ubuntu 服务器管理