在 Linux 服务器上安装 Claude Code 和 ChatGPT Codex:分步指南
从一台刚装好的 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 --help或codex --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.com和api.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 denied | 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 已生效。 |
| 登录时没有打开浏览器 | 在服务器上这是正常的。在另一台设备上打开显示的地址并输入代码,或者改用 API 密钥。 |
启动时出现 ECONNREFUSED 或超时 | 出站 HTTPS 被阻止。检查出站 443 端口的防火墙规则;KernelHost 服务器的出站流量默认是放开的。 |
429 rate limit 或 overloaded | 订阅或 API 的配额用完,或服务商过载。稍等片刻,无人值守的运行几分钟后再重试一次。 |
| 智能体每条命令都要问 | 扩展 ~/.claude/settings.json 中的白名单或 config.toml 中的 approval_policy,但只添加只读命令。 |
结论
在服务器上配置一个 AI 智能体只需一小时:用户、sudo 白名单、Node.js、工具、规则。真正的功夫在于限制,而这里的限制是刻意收紧的。当某个任务需要时再逐步放宽,绝不一次性放开。在 KernelHost Root 服务器 或 独立服务器 上,这一切不需要额外激活:Root 权限、发行版自由选择和出站连接都是标配。
常见问题
使用 Claude Code 需要订阅吗,还是 API 密钥就够了?
在没有浏览器的服务器上如何登录 Codex CLI?
我需要哪个 Node.js 版本?
为什么 npm install -g 会报 EACCES 错误?
可以在 cron 任务中运行 Claude Code 吗?
这在 KernelHost 的 Windows 服务器上也能用吗?
2026 KernelHost GmbH。保留所有权利。本教程受著作权法保护,未经我们书面同意,不得在其他网站上转载,节选转载或改写后转载同样不被允许。欢迎在注明出处并附上链接的前提下引用。

