在VPS上运行Claude Code:安装、安全加固与会话持久化
在远程Linux服务器上配置Claude Code,包括无头认证、tmux会话持久化和安全加固。每条命令均经过验证。
在VPS上运行Claude Code
Claude Code是一个基于终端的AI编程代理。它读取你的代码库、编辑文件、执行命令,并根据自然语言描述构建功能。在VPS上运行它,你就拥有了一个7×24小时运行的持久编程代理,可以从任何设备通过SSH访问。
本指南将带你从一台全新的Ubuntu VPS开始,完成Claude Code的安装和会话持久化配置。每个步骤都包含验证命令,确保操作成功。
Claude Code对VPS有什么要求?
Claude Code将你的提示发送到Anthropic的服务器进行推理。你的VPS只需存储项目文件、开发工具和Claude Code进程本身。因此不需要GPU或高端硬件。
| 要求 | 最低配置 | 推荐配置 |
|---|---|---|
| 操作系统 | Ubuntu 20.04 LTS | Ubuntu 24.04 LTS |
| 内存 | 4 GB | 8 GB |
| 磁盘 | 20 GB SSD | 40 GB NVMe |
| CPU | 2 vCPUs | 4 vCPUs |
| 网络 | 稳定的互联网连接 | 低延迟连接 |
| 依赖 | 无(原生安装器) | git、ripgrep(已内置) |
原生安装器内置ripgrep,不需要Node.js等运行时依赖。4 GB的VPS可以运行Claude Code和中等规模的代码库。如果你使用大型monorepo或运行其他服务,建议选择8 GB。
账户要求: Claude Code需要Claude Pro、Max、Teams、Enterprise或Console账户。Claude.ai免费计划不包含Claude Code访问权限。
安装Claude Code之前如何加固VPS?
在安装任何东西之前先锁定你的服务器。VPS上线后几分钟内就会遭到自动化暴力破解攻击。以下步骤创建非root用户、强制SSH密钥认证、配置防火墙并启用自动安全更新。
如果你已经有一台加固过的服务器,可以跳到如何在Linux服务器上安装Claude Code?。关于每个安全步骤的详细说明,请参阅。
创建非root用户
以root身份SSH登录服务器,然后创建一个拥有sudo权限的用户:
ssh root@YOUR_SERVER_IP
adduser claude
usermod -aG sudo claude
将SSH密钥复制到新用户,这样就可以免密码登录:
mkdir -p /home/claude/.ssh
cp /root/.ssh/authorized_keys /home/claude/.ssh/authorized_keys
chown -R claude:claude /home/claude/.ssh
chmod 700 /home/claude/.ssh
chmod 600 /home/claude/.ssh/authorized_keys
在继续操作之前,从另一个终端验证你能以新用户身份登录。不要关闭root会话:
ssh claude@YOUR_SERVER_IP
你应该看到claude@yourserver的shell提示符。如果成功,继续下一步。
禁用密码认证
编辑SSH配置以阻止基于密码的登录:
sudo sed -i 's/^#\?PasswordAuthentication.*/PasswordAuthentication no/' /etc/ssh/sshd_config
sudo sed -i 's/^#\?PermitRootLogin.*/PermitRootLogin no/' /etc/ssh/sshd_config
重启SSH并验证设置已生效:
sudo systemctl restart ssh
sudo sshd -T | grep -E 'passwordauthentication|permitrootlogin'
预期输出(顺序可能不同):
permitrootlogin no
passwordauthentication no
配置防火墙
UFW(Uncomplicated Firewall)会阻止所有入站流量,除了你明确允许的。在某些精简VPS镜像上,可能需要先用sudo apt install -y ufw安装。
sudo ufw default deny incoming
sudo ufw default allow outgoing
sudo ufw allow OpenSSH
sudo ufw enable
验证规则:
sudo ufw status
预期输出:
Status: active
To Action From
-- ------ ----
OpenSSH ALLOW Anywhere
OpenSSH (v6) ALLOW Anywhere (v6)
安装fail2ban
fail2ban在SSH登录多次失败后封禁对应IP地址:
sudo apt update && sudo apt install -y fail2ban
创建本地配置文件,使你的设置在软件包更新后仍然有效:
sudo tee /etc/fail2ban/jail.local > /dev/null << 'EOF'
[sshd]
enabled = true
port = ssh
filter = sshd
maxretry = 5
bantime = 3600
findtime = 600
EOF
启用并验证:
sudo systemctl enable --now fail2ban
sudo systemctl status fail2ban
注意看:输出应显示active (running)。enable --now标志让fail2ban立即启动,且在重启后自动运行。
sudo fail2ban-client status sshd
这会显示jail处于活动状态,当前封禁IP数为0(全新安装时正常)。
启用自动安全更新
Unattended-upgrades无需人工干预即可修补安全漏洞:
sudo apt install -y unattended-upgrades
sudo dpkg-reconfigure -plow unattended-upgrades
提示时选择"Yes"。验证是否已激活:
sudo systemctl status unattended-upgrades
输出应显示active (running)。
如何在Linux服务器上安装Claude Code?
原生安装器是推荐方法。它不需要任何依赖,在后台自动更新,支持所有受支持的Linux发行版。npm安装方式已弃用。
以非root用户身份运行安装器(不要用root):
curl -fsSL https://claude.ai/install.sh | bash
这是Anthropic官方安装器。如果你想在执行前先验证,可以查看安装文档获取SHA256校验和及代码签名详情。
安装器将二进制文件放置在~/.local/bin/claude并添加到PATH。打开新shell或source你的profile以生效:
source ~/.bashrc
验证安装:
claude --version
你应该看到类似2.x.x的版本号。运行内置诊断检查配置:
claude doctor
这会检查系统配置、网络连接和认证状态。此时认证会显示为未完成,这是正常的。
如何在无头VPS上认证Claude Code?
Claude Code通常会打开浏览器窗口进行OAuth登录。在没有图形界面的无头服务器上,需要使用其他方法。根据你的账户类型有两个选项。
选项A:从Claude Console获取API密钥
如果你有Claude Console账户(基于API计费),设置ANTHROPIC_API_KEY环境变量。这是无头服务器最简单的方法。
在console.anthropic.com生成API密钥,然后安全地存储在VPS上:
sudo mkdir -p /etc/claude-code
sudo tee /etc/claude-code/env > /dev/null << 'EOF'
ANTHROPIC_API_KEY=sk-ant-api03-your-key-here
EOF
sudo chmod 600 /etc/claude-code/env
sudo chown claude:claude /etc/claude-code/env
说明:创建一个权限受限的专用文件(只有你的用户可以读取),而不是把密钥放在.bashrc中(那里会出现在shell历史记录中,且可被其他进程读取)。
在shell profile中加载它。将这行添加到~/.bashrc:
echo 'set -a; source /etc/claude-code/env; set +a' >> ~/.bashrc
source ~/.bashrc
验证密钥已加载:
echo $ANTHROPIC_API_KEY | head -c 15
你应该看到sk-ant-api03-xx(密钥的前15个字符)。
选项B:从Claude订阅获取OAuth令牌
如果你使用Claude Pro或Max订阅(不是Console),在有浏览器的机器上生成OAuth令牌,然后传输到VPS。
在你的本地机器(有浏览器的那台)上:
claude setup-token
这会打开浏览器进行OAuth认证,并输出一个以sk-ant-oat01-开头的长期令牌。令牌有效期为一年。
复制令牌,然后在你的VPS上以相同方式存储:
sudo tee /etc/claude-code/env > /dev/null << 'EOF'
CLAUDE_CODE_OAUTH_TOKEN=sk-ant-oat01-your-token-here
EOF
sudo chmod 600 /etc/claude-code/env
sudo chown claude:claude /etc/claude-code/env
还需要创建~/.claude.json以跳过引导向导:
cat > ~/.claude.json << 'EOF'
{
"hasCompletedOnboarding": true
}
EOF
chmod 600 ~/.claude.json
在shell profile中加载:
echo 'set -a; source /etc/claude-code/env; set +a' >> ~/.bashrc
source ~/.bashrc
验证认证
测试Claude Code能否连接到Anthropic服务器:
claude -p "Say hello in exactly 5 words"
-p标志执行单次提示,不进入交互模式。如果你看到一个五个单词的问候语,说明认证成功。如果出现认证错误,用env | grep -E 'ANTHROPIC_API_KEY|CLAUDE_CODE_OAUTH_TOKEN'检查环境变量是否正确设置。
SSH断开后如何保持Claude Code运行?
使用tmux。它创建的终端会话在服务器上独立于SSH连接持续运行。合上笔记本电脑,飞到另一个国家,用手机SSH连回来。会话还在那里,完全保持你离开时的状态。
安装tmux
sudo apt install -y tmux
验证:
tmux -V
为Claude Code配置tmux
创建一个.tmux.conf,包含针对长时间编程会话优化的设置:
cat > ~/.tmux.conf << 'EOF'
# Increase scrollback buffer (default is 2000 lines)
set -g history-limit 50000
# Enable mouse support for scrolling and pane selection
set -g mouse on
# Start window numbering at 1
set -g base-index 1
# Reduce escape time for faster key response
set -sg escape-time 10
# Status bar with session name and time
set -g status-right '%H:%M %d-%b'
# Keep sessions alive if the shell exits unexpectedly
set -g remain-on-exit on
EOF
启动Claude Code会话
创建一个命名的tmux会话并在其中启动Claude Code:
tmux new -s claude
你现在在名为"claude"的tmux会话中。启动Claude Code:
cd ~/your-project
claude
Claude Code正在运行。要分离会话(让它在后台继续运行),按:
Ctrl+B,然后 D
你回到了普通的SSH提示符。Claude Code在tmux中继续运行。
tmux快速参考
| 操作 | 命令 |
|---|---|
| 创建命名会话 | tmux new -s claude |
| 分离会话 | Ctrl+B,然后D |
| 列出会话 | tmux ls |
| 重新连接会话 | tmux attach -t claude |
| 终止会话 | tmux kill-session -t claude |
| 向上滚动 | Ctrl+B,然后[,然后方向键 |
| 退出滚动模式 | q |
如何从其他设备重新连接Claude Code会话?
从任何设备SSH到你的VPS并重新连接:
ssh claude@YOUR_SERVER_IP
tmux attach -t claude
你的Claude Code会话完全保持离开时的状态。对话历史、文件上下文和正在运行的任务都保留着。这适用于笔记本电脑、手机(使用Termius等SSH应用)或其他服务器。
如果会话崩溃或被终止,tmux attach会失败。启动一个新会话:
tmux ls
如果没有列出任何会话,用tmux new -s claude创建一个新的。
如何限制Claude Code在服务器上的操作?
Claude Code有一个权限系统来控制它能使用哪些工具。默认情况下,它在执行bash命令或编辑文件前会请求确认。你可以通过项目目录中的.claude/settings.json预先批准安全命令并阻止危险命令。
永远不要在生产服务器上使用--dangerously-skip-permissions。它会绕过所有安全提示,让Claude Code不经询问就执行任何命令。
设置权限白名单
创建项目级配置文件:
cd ~/your-project
mkdir -p .claude
cat > .claude/settings.json << 'EOF'
{
"permissions": {
"allow": [
"Bash(npm run *)",
"Bash(npm test *)",
"Bash(git status)",
"Bash(git diff *)",
"Bash(git log *)",
"Bash(git add *)",
"Bash(git commit *)",
"Bash(ls *)",
"Bash(cat *)",
"Read",
"Bash(grep *)"
],
"deny": [
"Bash(rm -rf *)",
"Bash(git push --force *)",
"Bash(chmod 777 *)",
"Bash(curl * | bash)",
"Read(./.env)",
"Read(./.env.*)"
]
}
}
EOF
说明:allow数组让Claude Code无需每次询问即可执行这些命令。deny数组完全阻止危险命令。规则遵循deny优先原则:如果一个命令同时匹配allow和deny,deny生效。
验证文件已正确创建:
ls -la .claude/settings.json
文件应该对你的用户可读。由于此文件会提交到git,它适用于所有克隆项目的人。对于个人覆盖设置,使用.claude/settings.local.json(自动被gitignore)。
如何监控VPS资源?
Claude Code在4 GB VPS上正常运行时使用200-400 MB内存。大型项目或多个并发任务会增加内存消耗。设置swap空间可以防止内存不足导致进程被杀。
添加swap空间
检查是否已存在swap:
sudo swapon --show
如果输出为空,创建一个2 GB的swap文件:
sudo fallocate -l 2G /swapfile
sudo chmod 600 /swapfile
sudo mkswap /swapfile
sudo swapon /swapfile
将其添加到/etc/fstab使其在重启后持续生效:
echo '/swapfile none swap sw 0 0' | sudo tee -a /etc/fstab
验证:
free -h
你应该看到swap空间已列出。注意看:找到Swap:行,显示2.0Gi总量。
检查资源使用情况
在Claude Code运行时监控内存和CPU:
htop
如果htop未安装:sudo apt install -y htop。观察内存条。Claude Code应保持在200-400 MB左右。如果持续达到总RAM的80%以上,考虑升级VPS或关闭其他服务。
检查磁盘使用:
df -h /
Claude Code本身占用极少磁盘空间。项目文件和git历史才是主要消耗者。
在VPS上运行Claude Code需要多少费用?
Claude Code使用你现有的Claude订阅运行,无需额外费用。每月总成本是VPS加上Claude计划。
| VPS规格 | 月费用 | Claude计划 | 计划费用 | 总计 |
|---|---|---|---|---|
| 2 vCPU,4 GB RAM | ~$5-10 | Pro | $20/月 | $25-30/月 |
| 4 vCPU,8 GB RAM | ~$10-20 | Max | $100/月 | $110-120/月 |
| 4 vCPU,8 GB RAM | ~$10-20 | Console (API) | 按token计费 | $10-20 + 用量 |
Pro计划包含有限的Claude Code使用量。Max计划有更高的速率限制,适合重度使用。Console(API)按token计费,适合需要精细成本控制的团队。
对于全天候运行的持久编程代理,4 GB VPS + Pro计划约$25/月是入门方案。
遇到问题了?
Claude Code无法认证
检查环境变量是否已设置:
env | grep -E 'ANTHROPIC_API_KEY|CLAUDE_CODE_OAUTH_TOKEN'
如果为空,重新加载profile:source ~/.bashrc。如果变量已设置但认证仍然失败,验证密钥是否有效。OAuth令牌一年后过期。API密钥可以从Console撤销。
tmux会话消失
服务器重启时tmux会话会丢失。重启后启动新会话:
tmux new -s claude
检查服务器是否最近重启过:
uptime
Claude Code运行缓慢或无响应
检查可用内存:
free -h
如果RAM接近满载且swap使用量很高,Claude Code会变慢。终止未使用的进程或升级VPS。同时检查到Anthropic服务器的网络延迟:
curl -o /dev/null -s -w '%{time_total}\n' https://api.anthropic.com
1秒以内属于正常。更高的值说明你的VPS和Anthropic之间存在网络问题。
权限被拒绝错误
如果Claude Code无法读写文件,检查文件所有权:
ls -la ~/your-project
文件应属于你的用户(如果你按照本指南操作,应为claude:claude)。修复所有权:
sudo chown -R claude:claude ~/your-project
查看日志获取更多信息:
journalctl -u ssh -f
这会实时显示SSH相关日志。对排查连接问题很有用。
Copyright 2026 Virtua.Cloud. All rights reserved.