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

发布于 阅读时间 15 分钟

从一台刚装好的 Debian 或 Ubuntu 服务器到一个可用的 AI 智能体:用户与 sudo 白名单、Node.js 22、Claude Code 和 Codex CLI 的安装与登录、CLAUDE.md 与 AGENTS.md、最初的任务和常见错误。

本指南带你从一台刚装好的 Debian 或 Ubuntu 服务器,走到一个能分析日志、检查配置并执行维护任务的可用 AI 智能体。我们将配置 Claude Code(Anthropic)和 Codex CLI(OpenAI,ChatGPT 背后的命令行工具),两者都运行在一个权限受限的专用用户下。所有命令都在一台装有 Debian 13 和 Ubuntu 24.04 的 KernelHost KVM Root 服务器 上测试过。AI 托管服务器的总体概念和可选架构,见文章 AI 托管服务器:安全接入 AI 智能体

截至 2026 年 9 月。这些工具迭代很快;如有疑问,请用 claude --helpcodex --help 核对参数。

前提条件

  • 一台装有 Debian 12 或 13、或 Ubuntu 22.04 或 24.04 的 Root 服务器,并可通过 SSH 以 root 登录。在 AlmaLinux 和 Rocky Linux 上步骤相同,只是软件包命令叫 dnf 而不是 apt
  • 已完成基础加固:SSH 密钥登录、防火墙、自动安全更新。新 Root 服务器检查清单 涵盖了这些内容。
  • 一个 Anthropic 账户(Claude Pro、Max 或 Team)或 API 密钥,一个 ChatGPT 账户(Plus、Pro 或 Team)或 OpenAI API 密钥。如果只想配置一个工具,只需要其中一个。
  • api.anthropic.comapi.openai.com 的出站 HTTPS。KernelHost 服务器默认就满足;如果你自己的防火墙很严格,需要放行。

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

智能体绝不以 root 运行。它获得自己的账户,并通过 sudo 白名单获得它恰好需要的命令。先从几条只读命令开始,当某个任务确实需要时再扩展列表。

sudo adduser --disabled-password --gecos "AI 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 切换到该账户。

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

第 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 权限。详情和替代方案见 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 密钥是更好的选择:

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

这样密钥只存在于智能体用户的主目录里,其他用户无法读取。在 Anthropic 控制台创建密钥时设置月度支出上限,这样一个失控的会话也不会变得昂贵。

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

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

再加上一个工具白名单,让 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

现在是第一个任务,交互式执行:

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

同样的任务也可以无人值守地运行,例如作为每天早上 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 把工具精确限制在这次运行所需的范围内。写入操作不属于无人值守的运行。

第 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

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 级别会取消这两者,不属于生产系统。与 CLAUDE.md 类似的规则,Codex 从工作目录中的 AGENTS.md 文件读取;你可以使用相同的内容:

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

无人值守运行使用 codex exec "任务",它相当于 claude -p

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

不想在服务器上安装任何东西的人,可以在笔记本电脑上启动 Claude Code 或 Codex,让智能体通过 SSH 发送命令。为此服务器为智能体用户配置一个专用 SSH 密钥,并在 CLAUDE.md 里写明所有服务器命令都以 ssh aiagent@server 开头。这对偶尔的维护很合适,但较长的任务和 cron 任务还是直接在服务器上运行更好。

第 6 步:加固并设置限制

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

常见错误与解决方法

信息原因与解决方法
npm install -g 时出现 EACCES: permission deniednpm 想写入系统目录。设置用户前缀:npm config set prefix ~/.npm-global,然后把 export PATH=~/.npm-global/bin:$PATH 写入 ~/.bashrc,再重新安装。
Node.js version ... is not supported发行版软件源里的版本太旧。重复第 2 步,并用 node --version 确认 22.x 已生效。
登录时没有打开浏览器在服务器上这是正常的。在另一台设备上打开显示的地址并输入代码,或者改用 API 密钥。
启动时出现 ECONNREFUSED 或超时出站 HTTPS 被阻止。检查出站 443 端口的防火墙规则;KernelHost 服务器的出站流量默认是放开的。
429 rate limitoverloaded订阅或 API 的配额用完,或服务商过载。稍等片刻,无人值守的运行几分钟后再重试一次。
智能体每条命令都要问扩展 ~/.claude/settings.json 中的白名单或 config.toml 中的 approval_policy,但只添加只读命令。

结论

在服务器上配置一个 AI 智能体只需一小时:用户、sudo 白名单、Node.js、工具、规则。真正的功夫在于限制,而这里的限制是刻意收紧的。当某个任务需要时再逐步放宽,绝不一次性放开。在 KernelHost Root 服务器独立服务器 上,这一切不需要额外激活: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。因此直接从 NodeSource 仓库安装 Node.js 22 LTS,或者在智能体用户的主目录里用 nvm 安装。Debian 12 软件源里的版本太旧。
为什么 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 在 Windows 上可以通过 Node.js 原生运行,或者在 Windows Subsystem for Linux 中运行。用户和 sudo 白名单的步骤在那里对应一个没有管理员权限的独立 Windows 用户。

Claude Code Codex CLI ChatGPT KI-Agent Node.js Debian Ubuntu Serveradministration