在 Linux 服务器上安装 Claude Code 与 ChatGPT Codex:分步指南
从全新安装的 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 密钥就够了?
在没有浏览器的服务器上,如何登录 Codex CLI?
我需要哪个版本的 Node.js?
为什么 npm install -g 会报 EACCES 错误?
可以在 cron 任务中运行 Claude Code 吗?
这在 KernelHost 的 Windows 服务器上也能运行吗?
可以在一台服务器上同时使用 Claude Code、Codex CLI 和 Gemini CLI 吗?
AI 智能体在服务器上需要多少内存?
如何更新 Claude Code、Codex CLI 和 Gemini CLI?
如何在服务器上配置 Gemini CLI?
为什么 AI 智能体不能以 root 身份运行?
2026 KernelHost GmbH。保留所有权利。本教程受著作权法保护,未经我们书面同意,不得在其他网站上转载,节选转载或改写后转载同样不被允许。欢迎在注明出处并附上链接的前提下引用。

