<!-- title: Claude Code远程开发全栈实战 -->

## 概述

本教程系统讲解如何在远程服务器上运行Claude Code，涵盖SSH直连、Docker容器化、VPS部署、云GPU平台接入四大方案。学完后你将掌握从任意设备（笔记本、iPad、手机）安全地连接远程开发环境，利用tmux保持会话持久化，实现跨地域的AI辅助编程工作流。适合已有基础Claude Code使用经验、希望扩展到远程开发场景的开发者。

## 前置条件

- Claude Code已安装并完成API Key配置（本地环境）
- 基本的Linux命令行操作能力
- 一台远程服务器（VPS、云主机或家庭服务器均可）
- 基础SSH知识（连接、密钥认证）
- 了解Docker基础概念（可选，Docker方案需要）

---

## 第一章：为什么需要远程开发

### 1.1 本地开发的五大痛点

Claude Code在本地运行时存在几个结构性限制：

| 痛点 | 具体表现 | 远程方案的解决方式 |
|------|----------|-------------------|
| **会话中断** | 合上笔记本盖子、网络波动，上下文全部丢失 | tmux保持服务端会话，断线不断任务 |
| **硬件限制** | 大型项目编译、测试耗尽本地资源 | 云服务器弹性扩展，按需分配算力 |
| **团队协作** | 同事无法复现你的开发环境 | Docker镜像统一环境，一人配置全员复用 |
| **安全合规** | 代码不能离开企业网络 | 服务器在内网运行Claude Code，代码不外泄 |
| **移动办公** | iPad/手机无法直接运行Claude Code | SSH/tmux从任意设备接入 |

### 1.2 远程开发架构总览

```mermaid
graph TB
    subgraph "客户端设备"
        A[MacBook]
        B[iPad]
        C[手机]
        D[Chromebook]
    end

    subgraph "接入层"
        E[Tailscale VPN]
        F[SSH密钥认证]
        G[Cloudflare Tunnel]
    end

    subgraph "服务端环境"
        H[tmux会话管理]
        I[Claude Code CLI]
        J[项目代码仓库]
    end

    subgraph "基础设施"
        K[家庭服务器]
        L[VPS云主机]
        M[RunPod GPU云]
        N[Docker容器]
    end

    A --> E
    B --> E
    C --> F
    D --> G
    E --> H
    F --> H
    G --> H
    H --> I
    I --> J
    J --> K
    J --> L
    J --> M
    J --> N
```

---

## 第二章：方案一——SSH直连远程服务器

### 2.1 服务器端准备

首先在远程服务器上安装Claude Code。假设你的服务器是Ubuntu 22.04/24.04：

```bash
# 更新系统
sudo apt update && sudo apt upgrade -y

# 安装Node.js 20+（Claude Code的运行时）
curl -fsSL https://deb.nodesource.com/setup_20.x | sudo -E bash -
sudo apt install -y nodejs

# 验证版本
node --version  # 需要 >= 20.0.0
npm --version

# 安装Claude Code
npm install -g @anthropic-ai/claude-code

# 验证安装
claude --version
```

### 2.2 配置API认证

有两种认证方式可选：

**方式A：API Key直接认证（适合个人/测试）**

```bash
# 设置环境变量（写入shell配置文件持久化）
echo 'export ANTHROPIC_API_KEY="sk-ant-api03-xxxxx"' >> ~/.bashrc
source ~/.bashrc

# 启动Claude Code
claude
```

**方式B：OAuth登录（推荐，更安全）**

```bash
# 在本地机器完成OAuth认证后，将token复制到远程服务器
# 本地执行：
claude auth token

# 在远程服务器上：
claude auth login --token <your-token>
```

> **安全提醒**：绝不要将API Key硬编码在脚本中或提交到Git仓库。使用环境变量或专用密钥管理工具。

### 2.3 SSH密钥免密登录

每次输入密码太繁琐，配置密钥认证：

```bash
# 本地机器生成密钥（如果还没有的话）
ssh-keygen -t ed25519 -C "claude-dev@remote" -f ~/.ssh/claude_remote

# 将公钥复制到远程服务器
ssh-copy-id -i ~/.ssh/claude_remote.pub user@your-server-ip

# 配置SSH config简化连接
cat >> ~/.ssh/config << 'EOF'
Host claude-dev
    HostName your-server-ip
    User your-username
    IdentityFile ~/.ssh/claude_remote
    ServerAliveInterval 60
    ServerAliveCountMax 3
    TCPKeepAlive yes
EOF

# 现在可以直接连接
ssh claude-dev
```

**关键参数解释**：
- `ServerAliveInterval 60`：每60秒发送心跳包，防止连接被防火墙断开
- `ServerAliveCountMax 3`：3次心跳失败才判定断开
- `TCPKeepAlive yes`：启用TCP层保活

### 2.4 首次远程启动Claude Code

```bash
# SSH连接到服务器
ssh claude-dev

# 进入项目目录
cd ~/my-project

# 启动Claude Code
claude

# 验证远程运行状态——在另一个终端执行
ssh claude-dev "ps aux | grep claude"
```

### 2.5 常见问题排查

**问题1：连接超时**

```bash
# 检查服务器SSH服务状态
sudo systemctl status sshd

# 检查防火墙规则
sudo ufw status
sudo ufw allow 22/tcp

# 检查是否在监听
ss -tlnp | grep :22
```

**问题2：Node.js版本不兼容**

```bash
# 使用nvm管理Node版本
curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.40.0/install.sh | bash
source ~/.bashrc
nvm install 20
nvm use 20
```

**问题3：权限问题导致全局安装失败**

```bash
# 避免使用sudo安装npm包
npm config set prefix ~/.npm-global
echo 'export PATH=~/.npm-global/bin:$PATH' >> ~/.bashrc
source ~/.bashrc
npm install -g @anthropic-ai/claude-code
```

---

## 第三章：tmux会话持久化——断线不断任务

### 3.1 为什么tmux是远程开发的核心

SSH直连有一个致命弱点：网络一断，Claude Code会话随之死亡，所有上下文清零。tmux（Terminal Multiplexer）在服务端创建虚拟终端，即使SSH断开，tmux中的进程继续运行。

```mermaid
sequenceDiagram
    participant L as 本地笔记本
    participant S as 远程服务器
    participant T as tmux会话
    participant C as Claude Code

    L->>S: SSH连接
    S->>T: tmux attach
    T->>C: 运行Claude Code

    Note over L: 合上笔记本盖子
    L--xS: SSH断开
    Note over T,C: tmux中的Claude Code继续运行

    Note over L: 打开笔记本
    L->>S: 重新SSH连接
    S->>T: tmux attach
    T-->>L: 恢复完整会话
    Note over L,C: 所有上下文完整保留
```

### 3.2 tmux安装与基础配置

```bash
# 安装tmux
sudo apt install -y tmux

# 创建优化配置文件
cat > ~/.tmux.conf << 'EOF'
# 前缀键改为Ctrl+a（比默认Ctrl+b更好按）
unbind C-b
set -g prefix C-a
bind C-a send-prefix

# 鼠标支持（可以滚动、点击切换面板）
set -g mouse on

# 256色支持（Claude Code的UI需要）
set -g default-terminal "screen-256color"

# 窗口编号从1开始
set -g base-index 1
setw -g pane-base-index 1

# 分屏快捷键
bind | split-window -h -c "#{pane_current_path}"
bind - split-window -v -c "#{pane_current_path}"

# 快速重载配置
bind r source-file ~/.tmux.conf \; display "配置已重载"

# 状态栏显示会话名称
set -g status-right '#[fg=green]#S #[fg=yellow]%H:%M'
EOF
```

### 3.3 Claude Code专用tmux工作流

**场景一：单项目专注模式**

```bash
# SSH连接
ssh claude-dev

# 创建名为"myproject"的tmux会话
tmux new -s myproject -d

# 在会话中启动Claude Code
tmux send-keys -t myproject 'cd ~/my-project && claude' Enter

# 连接到会话（可随时断开）
tmux attach -t myproject

# 断开会话（不停止）：按 Ctrl+a 然后按 d
# 重新连接：
tmux attach -t myproject
```

**场景二：多项目并行开发**

```bash
# 创建多个会话，每个项目一个
tmux new -s frontend -d
tmux new -s backend -d
tmux new -s infra -d

# 在每个会话中启动Claude Code
tmux send-keys -t frontend 'cd ~/frontend && claude' Enter
tmux send-keys -t backend 'cd ~/backend && claude' Enter
tmux send-keys -t infra 'cd ~/infra && claude' Enter

# 在会话之间切换
tmux switch -t frontend
tmux switch -t backend

# 列出所有会话
tmux ls
```

**场景三：单会话多面板监控**

```bash
# 创建会话
tmux new -s dev

# Ctrl+a 然后按 | 垂直分屏
# 左边运行Claude Code，右边运行测试
# 左面板
claude

# 切换到右面板（Ctrl+a 然后方向键）
# 右面板
npm test -- --watch
```

### 3.4 自动化启动脚本

创建一个脚本，一键启动完整的远程开发环境：

```bash
cat > ~/start-claude-dev.sh << 'SCRIPT'
#!/bin/bash
# Claude Code远程开发环境启动脚本

PROJECTS=("$HOME/project-api" "$HOME/project-web" "$HOME/project-infra")
SESSIONS=("api" "web" "infra")

# 创建tmux会话
for i in "${!SESSIONS[@]}"; do
    session="${SESSIONS[$i]}"
    project="${PROJECTS[$i]}"
    
    # 检查会话是否已存在
    if ! tmux has-session -t "$session" 2>/dev/null; then
        tmux new-session -d -s "$session" -c "$project"
        tmux send-keys -t "$session" 'claude' Enter
        echo "✓ 启动会话: $session -> $project"
    else
        echo "- 会话已存在: $session"
    fi
done

echo ""
echo "所有会话已就绪。连接方式："
echo "  tmux attach -t api     # 连接API项目"
echo "  tmux attach -t web     # 连接Web项目"
echo "  tmux attach -t infra   # 连接基础设施项目"
echo "  tmux ls                # 查看所有会话"
SCRIPT

chmod +x ~/start-claude-dev.sh
```

### 3.5 远程Claude Code会话的监控

长时间运行的Claude Code任务（如大规模重构）需要监控：

```bash
# 创建监控面板
tmux new -s monitor -d

# 上半部分：查看Claude Code进程
tmux send-keys -t monitor 'watch -n 5 "ps aux | grep claude | grep -v grep"' Enter

# 分屏
tmux split-window -v -t monitor

# 下半部分：查看资源使用
tmux send-keys -t monitor 'htop' Enter

# 连接监控面板
tmux attach -t monitor
```

---

## 第四章：方案二——Docker容器化部署

### 4.1 为什么用Docker运行Claude Code

Docker方案的优势：

- **环境隔离**：每个项目独立的依赖和工具链
- **可复现性**：团队共享相同的开发环境镜像
- **快速销毁重建**：搞坏了直接删容器重建
- **资源限制**：控制CPU/内存使用上限

### 4.2 Dockerfile编写

```dockerfile
# Dockerfile.claude-dev
FROM node:20-slim

# 安装系统依赖
RUN apt-get update && apt-get install -y \
    git \
    curl \
    tmux \
    vim \
    python3 \
    build-essential \
    && rm -rf /var/lib/apt/lists/*

# 安装Claude Code
RUN npm install -g @anthropic-ai/claude-code

# 创建非root用户（安全最佳实践）
RUN useradd -m -s /bin/bash claude-dev
USER claude-dev
WORKDIR /home/claude-dev/workspace

# 健康检查
HEALTHCHECK --interval=30s --timeout=10s --retries=3 \
    CMD which claude || exit 1

# 默认启动交互式shell
CMD ["/bin/bash"]
```

### 4.3 docker-compose配置

```yaml
# docker-compose.yml
version: '3.8'

services:
  claude-dev:
    build:
      context: .
      dockerfile: Dockerfile.claude-dev
    container_name: claude-dev-env
    volumes:
      # 挂载项目代码（双向同步）
      - ./workspace:/home/claude-dev/workspace
      # 持久化Claude Code配置
      - claude-config:/home/claude-dev/.claude
    environment:
      - ANTHROPIC_API_KEY=${ANTHROPIC_API_KEY}
    # 资源限制
    deploy:
      resources:
        limits:
          cpus: '4'
          memory: 8G
    # SSH端口映射（远程访问用）
    ports:
      - "2222:22"
    # 保持容器运行
    stdin_open: true
    tty: true
    restart: unless-stopped

volumes:
  claude-config:
```

### 4.4 启动与使用

```bash
# 构建并启动
docker compose up -d --build

# 进入容器
docker exec -it claude-dev-env bash

# 在容器内启动Claude Code
claude

# 或者一行命令直接进入Claude Code
docker exec -it claude-dev-env claude

# 查看容器日志
docker compose logs -f claude-dev

# 停止（数据保留在volume中）
docker compose down

# 完全清理（包括数据）
docker compose down -v
```

### 4.5 通过SSH访问Docker容器

如果你需要从其他机器访问这个容器：

```bash
# 在容器内安装SSH服务
apt-get update && apt-get install -y openssh-server
echo "claude-dev:your-password" | chpasswd

# 启动SSH
service ssh start

# 从外部连接
ssh -p 2222 claude-dev@your-server-ip
```

### 4.6 常见Docker问题

**问题：Claude Code无法访问Git仓库**

```bash
# 挂载SSH密钥（只读）
# 在docker-compose.yml中添加：
volumes:
  - ~/.ssh:/home/claude-dev/.ssh:ro

# 或者使用Git credential helper
git config --global credential.helper store
```

**问题：文件权限不匹配**

```bash
# 确保容器内用户UID与宿主机匹配
# 修改Dockerfile：
ARG USER_ID=1000
ARG GROUP_ID=1000
RUN useradd -m -u ${USER_ID} -g ${GROUP_ID} claude-dev
```

---

## 第五章：方案三——VPS云主机部署

### 5.1 VPS选型建议

不同使用场景的VPS配置推荐：

| 场景 | CPU | 内存 | 存储 | 月费参考 | 推荐服务商 |
|------|-----|------|------|---------|-----------|
| 轻度编码/学习 | 1核 | 1GB | 25GB SSD | $5-10 | DigitalOcean, Linode |
| 中型项目开发 | 2核 | 4GB | 50GB SSD | $20-40 | AWS Lightsail, Hetzner |
| 大型项目/团队 | 4核+ | 8GB+ | 100GB+ SSD | $40-80 | AWS EC2, GCP Compute |
| GPU加速/ML | 4核+ | 16GB+ | 200GB+ | $0.5-2/小时 | RunPod, Lambda Labs |

### 5.2 一键VPS部署脚本

以下脚本可在全新的Ubuntu VPS上一键配置Claude Code远程开发环境：

```bash
#!/bin/bash
# deploy-claude-vps.sh — VPS一键部署Claude Code远程开发环境
# 用法：curl -fsSL <this-script-url> | bash

set -euo pipefail

echo "=== Claude Code VPS一键部署 ==="

# 1. 系统更新
echo "[1/7] 更新系统..."
sudo apt update && sudo apt upgrade -y

# 2. 安装基础工具
echo "[2/7] 安装基础工具..."
sudo apt install -y \
    git curl wget tmux htop \
    build-essential python3 \
    fail2ban ufw

# 3. 安装Node.js
echo "[3/7] 安装Node.js..."
curl -fsSL https://deb.nodesource.com/setup_20.x | sudo -E bash -
sudo apt install -y nodejs

# 4. 安装Claude Code
echo "[4/7] 安装Claude Code..."
npm install -g @anthropic-ai/claude-code

# 5. 配置防火墙
echo "[5/7] 配置防火墙..."
sudo ufw default deny incoming
sudo ufw default allow outgoing
sudo ufw allow 22/tcp   # SSH
sudo ufw allow from 10.0.0.0/8  # 内网访问
sudo ufw --force enable

# 6. 配置fail2ban防暴力破解
echo "[6/7] 配置fail2ban..."
sudo tee /etc/fail2ban/jail.local > /dev/null << 'EOF'
[sshd]
enabled = true
port = 22
filter = sshd
logpath = /var/log/auth.log
maxretry = 3
bantime = 3600
findtime = 600
EOF
sudo systemctl enable fail2ban
sudo systemctl start fail2ban

# 7. 创建tmux启动脚本
echo "[7/7] 创建启动脚本..."
cat > ~/start-claude.sh << 'LAUNCH'
#!/bin/bash
SESSION="claude-$(date +%m%d)"
if ! tmux has-session -t "$SESSION" 2>/dev/null; then
    tmux new-session -d -s "$SESSION"
fi
tmux attach -t "$SESSION"
LAUNCH
chmod +x ~/start-claude.sh

echo ""
echo "=== 部署完成 ==="
echo "下一步："
echo "  1. 设置API Key: export ANTHROPIC_API_KEY='your-key'"
echo "  2. 克隆项目: git clone <repo-url> ~/project"
echo "  3. 启动开发: ~/start-claude.sh"
```

### 5.3 安全加固清单

```bash
# 1. 禁用密码登录，只允许密钥认证
sudo sed -i 's/#PasswordAuthentication yes/PasswordAuthentication no/' /etc/ssh/sshd_config
sudo sed -i 's/#PubkeyAuthentication yes/PubkeyAuthentication yes/' /etc/ssh/sshd_config
sudo systemctl restart sshd

# 2. 更改SSH默认端口（减少扫描攻击）
sudo sed -i 's/Port 22/Port 2222/' /etc/ssh/sshd_config
sudo ufw allow 2222/tcp
sudo systemctl restart sshd
# 客户端SSH config也要更新端口

# 3. 创建专用开发用户（不用root）
sudo useradd -m -s /bin/bash claude-dev
sudo usermod -aG sudo claude-dev

# 4. 设置自动安全更新
sudo apt install -y unattended-upgrades
sudo dpkg-reconfigure -plow unattended-upgrades
```

---

## 第六章：方案四——云GPU平台接入

### 6.1 为什么在GPU云上运行Claude Code

当你的项目涉及机器学习、CUDA编译、GPU密集型计算时，本地机器力不从心。RunPod、Lambda Labs等GPU云平台提供按小时计费的GPU实例。

### 6.2 RunPod部署Claude Code

RunPod是目前最流行的GPU云平台之一，官方已提供Claude Code集成支持：

```bash
# Step 1: 在RunPod上创建Pod
# 选择模板：RunPod PyTorch 2.0+
# 选择GPU：RTX 4090或A100（根据需求）
# 开启SSH访问：Enable SSH

# Step 2: SSH连接到Pod
ssh root@<pod-ip> -p <port> -i <your-key>

# Step 3: 安装Claude Code
curl -fsSL https://deb.nodesource.com/setup_20.x | bash -
apt-get install -y nodejs
npm install -g @anthropic-ai/claude-code

# Step 4: 配置认证
export ANTHROPIC_API_KEY="sk-ant-xxxxx"

# Step 5: 启动tmux + Claude Code
tmux new -s gpu-dev
cd /workspace
claude
```

### 6.3 利用runclaude工具自动化管理

社区开发的`runclaude`工具可以让你从本地通过Claude Code直接操控RunPod：

```bash
# 安装runclaude
pip install runclaude

# 配置RunPod API Key
export RUNPOD_API_KEY="your-runpod-key"

# 通过Claude Code Skill自动创建和管理Pod
# 在Claude Code中输入：
# "Create a RunPod pod with RTX 4090, install PyTorch 2.1, and set up my ML project"
```

### 6.4 成本优化策略

GPU实例按小时计费，不使用时务必关机：

```bash
# 自动空闲检测脚本
cat > ~/idle-watchdog.sh << 'EOF'
#!/bin/bash
# 检测Claude Code空闲时间，自动通知（不自动关机，避免数据丢失）

IDLE_THRESHOLD=1800  # 30分钟（秒）
LOG_FILE="/var/log/claude-idle.log"

while true; do
    # 检查Claude Code进程
    if ! pgrep -f "claude" > /dev/null; then
        echo "$(date): Claude Code未运行" >> "$LOG_FILE"
    fi
    
    # 检查GPU利用率
    GPU_UTIL=$(nvidia-smi --query-gpu=utilization.gpu --format=csv,noheader,nounits | head -1)
    if [ "$GPU_UTIL" -lt 5 ]; then
        echo "$(date): GPU空闲 ($GPU_UTIL%), 考虑关机节省成本" >> "$LOG_FILE"
    fi
    
    sleep 300  # 每5分钟检查一次
done
EOF
chmod +x ~/idle-watchdog.sh
```

---

## 第七章：网络接入方案对比

### 7.1 四种远程接入方式

远程开发的核心挑战是网络接入。以下是四种主流方案对比：

| 方案 | 安全性 | 配置难度 | 适用场景 | 延迟 |
|------|--------|---------|---------|------|
| **SSH直连** | 中（需配置防火墙） | 低 | 内网、固定IP | 最低 |
| **Tailscale** | 高（WireGuard加密） | 低 | 任意网络、多设备 | 低 |
| **Cloudflare Tunnel** | 高（企业级加密） | 中 | 需要固定域名 | 中 |
| **Mosh** | 中 | 低 | 高延迟/不稳定网络 | 极低（预测输入） |

### 7.2 Tailscale方案（推荐）

Tailscale基于WireGuard，零配置VPN，适合多设备远程开发：

```bash
# 服务器端安装
curl -fsSL https://tailscale.com/install.sh | sh
sudo tailscale up

# 本地机器安装
# macOS: brew install tailscale
# 或从App Store安装

# 验证连接
tailscale status

# 通过Tailscale IP连接（不再需要公网IP）
ssh claude-dev@100.x.x.x
```

配置完成后，你的手机、iPad、任何设备都能安全访问远程服务器，无需暴露SSH端口到公网。

### 7.3 Cloudflare Tunnel方案

适合需要固定域名访问的场景（如Web开发预览）：

```bash
# 安装cloudflared
curl -fsSL https://pkg.cloudflare.com/cloudflare-main.gpg | sudo tee /usr/share/keyrings/cloudflare-main.gpg
echo "deb [signed-by=/usr/share/keyrings/cloudflare-main.gpg] https://pkg.cloudflare.com/cloudflared $(lsb_release -cs) main" | sudo tee /etc/apt/sources.list.d/cloudflared.list
sudo apt update && sudo apt install -y cloudflared

# 登录Cloudflare
cloudflared tunnel login

# 创建隧道
cloudflared tunnel create claude-dev
cloudflared tunnel route dns claude-dev dev.yourdomain.com

# 配置隧道
cat > ~/.cloudflared/config.yml << 'EOF'
tunnel: claude-dev
credentials-file: /home/you/.cloudflared/<tunnel-id>.json

ingress:
  - hostname: dev.yourdomain.com
    service: ssh://localhost:22
  - service: http_status:404
EOF

# 启动隧道
cloudflared tunnel run claude-dev
```

### 7.4 Mosh方案（适合不稳定网络）

Mosh（Mobile Shell）是SSH的替代品，在网络切换、高延迟环境下表现优异：

```bash
# 服务器端安装
sudo apt install -y mosh

# 客户端安装
# macOS: brew install mosh
# Ubuntu: sudo apt install mosh

# 连接（替代SSH）
mosh claude-dev

# 如果需要指定SSH端口
mosh --ssh="ssh -p 2222" claude-dev
```

Mosh的核心优势：
- 网络切换时自动重连（从WiFi切换到4G无需手动操作）
- 本地回显，高延迟下输入无卡顿
- 断开后会话状态完整保留

---

## 第八章：实战案例——完整的远程开发工作流

### 8.1 场景描述

假设你是一名远程开发者，需要在GPU服务器上运行Claude Code进行ML项目开发，同时从MacBook和iPad上切换工作。

### 8.2 完整配置流程

```mermaid
graph LR
    A[购买VPS/GPU云] --> B[安装系统依赖]
    B --> C[安装Claude Code]
    C --> D[配置Tailscale]
    D --> E[配置tmux]
    E --> F[部署项目代码]
    F --> G[编写CLAUDE.md]
    G --> H[启动远程开发]

    subgraph "日常使用流程"
        H --> I[SSH连接]
        I --> J[tmux attach]
        J --> K[继续Claude Code会话]
        K --> L[Ctrl+a d 断开]
        L --> I
    end
```

**Step 1：服务器端完整配置**

```bash
#!/bin/bash
# server-setup.sh

# 系统更新
sudo apt update && sudo apt upgrade -y

# 安装开发工具
sudo apt install -y git tmux mosh htop build-essential python3 python3-pip

# 安装Node.js + Claude Code
curl -fsSL https://deb.nodesource.com/setup_20.x | sudo -E bash -
sudo apt install -y nodejs
npm install -g @anthropic-ai/claude-code

# 安装Tailscale
curl -fsSL https://tailscale.com/install.sh | sh
sudo tailscale up

# 配置tmux
cat > ~/.tmux.conf << 'TMUX'
set -g prefix C-a
set -g mouse on
set -g default-terminal "screen-256color"
set -g base-index 1
bind | split-window -h -c "#{pane_current_path}"
bind - split-window -v -c "#{pane_current_path}"
TMUX

# 设置API Key（替换为你的真实Key）
echo 'export ANTHROPIC_API_KEY="sk-ant-xxxxx"' >> ~/.bashrc
source ~/.bashrc

# 克隆项目
git clone https://github.com/your-org/your-project.git ~/project
cd ~/project

# 创建项目级CLAUDE.md
cat > CLAUDE.md << 'CLAUDE'
# 项目：ML Pipeline

## 项目结构
- src/training/ — 模型训练代码
- src/inference/ — 推理服务
- tests/ — 单元测试
- notebooks/ — 实验笔记本

## 开发规则
- 所有新函数必须有docstring
- 使用Black格式化代码
- 提交前运行: pytest tests/
- GPU训练使用CUDA 12.1

## 常用命令
- 训练: python src/training/train.py --config config.yaml
- 测试: pytest tests/ -v
- 格式化: black src/ tests/
CLAUDE

echo "服务器配置完成！"
```

**Step 2：创建持久化tmux会话**

```bash
# 创建会话
tmux new -s ml-project -d

# 在会话中启动Claude Code
tmux send-keys -t ml-project 'cd ~/project && claude' Enter
```

**Step 3：从MacBook连接**

```bash
# 确保Tailscale已连接
tailscale status

# 获取服务器Tailscale IP（或使用MagicDNS名称）
# ssh user@your-server-name

# 通过Tailscale SSH连接并接入tmux
ssh user@ml-server 'tmux attach -t ml-project'
```

**Step 4：从iPad连接**

在iPad上使用Termius或Blink Shell应用：

```
# Termius/Blink Shell配置
Host: ml-server (Tailscale名称或IP)
User: your-username
Key: 导入SSH私钥

# 连接后执行
tmux attach -t ml-project
```

**Step 5：日常开发循环**

```bash
# 早晨：从MacBook开始工作
ssh user@ml-server
tmux attach -t ml-project
# ... 使用Claude Code开发 ...
# 合上笔记本（Ctrl+a d 或直接断开）

# 通勤中：从iPad继续
# 打开Termius -> 连接 -> tmux attach
# Claude Code会话完整保留，继续上次的工作

# 晚上：从手机紧急处理
mosh user@ml-server
tmux attach -t ml-project
# 处理完毕后断开
```

### 8.3 CLAUDE.md远程开发模板

针对远程开发场景的CLAUDE.md配置要点：

```markdown
# 项目名

## 远程开发信息
- 服务器：ml-server (Tailscale)
- tmux会话：ml-project
- GPU：NVIDIA RTX 4090
- CUDA：12.1

## 项目结构
...

## 远程开发注意事项
- 长时间运行的任务使用tmux保持
- GPU训练任务用 nvidia-smi 监控
- 代码修改后自动运行测试验证
- 不要在/tmp目录存放重要文件（容器重启会丢失）
```

---

## 第九章：高级技巧与优化

### 9.1 Claude Code Remote Control功能

Anthropic在2025年推出了Remote Control功能，支持本地和远程会话的无缝切换：

```bash
# 本地启动会话
claude

# 在Claude Code内部使用remote-control
# 将当前会话移交到远程服务器继续
/remote-control ssh user@server --session current

# 会话状态完整保留：
# - 文件上下文
# - 对话历史
# - 工具状态
# - 工作目录
```

### 9.2 并行远程Agent编排

在一台服务器上同时运行多个Claude Code实例处理不同任务：

```bash
#!/bin/bash
# parallel-agents.sh — 并行启动多个Claude Code Agent

# 使用git worktree创建隔离的工作目录
REPO_ROOT="$HOME/my-project"
TASKS=("refactor-auth" "add-tests" "update-docs" "fix-logging")

for task in "${TASKS[@]}"; do
    # 为每个任务创建worktree
    cd "$REPO_ROOT"
    git worktree add "$HOME/worktrees/$task" -b "agent/$task" 2>/dev/null || true
    
    # 创建独立tmux会话
    tmux new-session -d -s "agent-$task" -c "$HOME/worktrees/$task"
    
    # 在会话中启动Claude Code并执行任务
    tmux send-keys -t "agent-$task" \
        "claude -p 'Work on task: $task. Follow CLAUDE.md rules. Make minimal, focused changes.'" \
        Enter
    
    echo "✓ Agent启动: $task"
done

echo "所有Agent已启动。监控命令："
echo "  tmux ls                    # 查看所有会话"
echo "  tmux attach -t agent-refactor-auth  # 查看特定Agent"
```

### 9.3 Headless模式批量任务

在CI/CD或批处理场景中使用Claude Code的非交互模式：

```bash
# 非交互式执行单个任务
claude -p "Add error handling to all API endpoints in src/routes/" \
    --allowedTools "Edit,Read,Bash" \
    --output-format json > result.json

# 批量执行多个任务
cat > tasks.txt << 'EOF'
Refactor the authentication middleware to use JWT
Add unit tests for the payment module
Update all dependencies to latest stable versions
EOF

while IFS= read -r task; do
    echo "执行任务: $task"
    claude -p "$task" --allowedTools "Edit,Read,Bash,Glob,Grep"
    echo "---"
done < tasks.txt
```

### 9.4 资源监控与告警

```bash
# 创建监控脚本
cat > ~/claude-monitor.sh << 'MONITOR'
#!/bin/bash
ALERT_EMAIL="dev@team.com"
CPU_THRESHOLD=90
MEM_THRESHOLD=85

check_resources() {
    local cpu_usage=$(top -bn1 | grep "Cpu(s)" | awk '{print $2}' | cut -d. -f1)
    local mem_usage=$(free | grep Mem | awk '{printf("%.0f", $3/$2 * 100)}')
    
    if [ "$cpu_usage" -gt "$CPU_THRESHOLD" ] || [ "$mem_usage" -gt "$MEM_THRESHOLD" ]; then
        echo "⚠ 资源告警: CPU=${cpu_usage}%, MEM=${mem_usage}%"
        # 可以集成Slack/Discord通知
    fi
    
    # 检查Claude Code进程数
    local claude_count=$(pgrep -f "claude" | wc -l)
    echo "$(date): Claude进程数=$claude_count, CPU=${cpu_usage}%, MEM=${mem_usage}%"
}

while true; do
    check_resources
    sleep 60
done
MONITOR
chmod +x ~/claude-monitor.sh
```

---

## 第十章：方案选择决策矩阵

### 10.1 快速选择指南

```mermaid
graph TD
    A[需要远程开发?] --> B{有GPU需求?}
    B -->|是| C{训练还是推理?}
    B -->|否| D{团队还是个人?}

    C -->|训练| E[RunPod/Lambda GPU云]
    C -->|推理| F[VPS + Docker]

    D -->|团队| G[共享VPS + Docker]
    D -->|个人| H{在家还是外出?}

    H -->|在家| I[家庭服务器 + Tailscale]
    H -->|频繁外出| J[云VPS + Mosh + tmux]

    E --> K[tmux + nvidia-smi监控]
    F --> L[tmux + Claude Code]
    G --> M[Docker Compose + 共享镜像]
    I --> N[SSH + tmux]
    J --> O[Tailscale + tmux + mosh]
```

### 10.2 成本估算对比

| 方案 | 初始投入 | 月运营成本 | 优点 | 缺点 |
|------|---------|-----------|------|------|
| 家庭服务器 | $300-800(一次性) | $10-20(电费) | 数据隐私，无限使用 | 需要维护硬件 |
| VPS云主机 | $0 | $5-80/月 | 弹性扩容，全球接入 | 长期成本累积 |
| Docker容器 | $0 | 包含在VPS费用中 | 环境一致，快速重建 | 需要Docker知识 |
| GPU云 | $0 | $0.5-2/小时 | 按需使用GPU | 忘记关机费用很高 |

---

## 延伸阅读

1. Anthropic官方文档 — Claude Code Remote Development：[code.claude.com/docs](https://code.claude.com/docs)
2. Docker官方Claude Code指南：[docs.docker.com/ai/sandboxes/agents/claude-code](https://docs.docker.com/ai/sandboxes/agents/claude-code)
3. Tailscale官方SSH配置教程：[tailscale.com/kb/1152/ssh](https://tailscale.com/kb/1152/ssh)

## 参考来源

1. [Claude Code Best Practices: The Official and Community-Tested Guide for 2026](https://thepromptshelf.dev/blog/claude-code-best-practices-2026/) — Prompt Shelf综合最佳实践指南，涵盖远程开发配置
2. [Tmux + Claude Code SSH Persistent Session](https://treeru.com/en/blog/tmux-claude-code-ssh-persistent-session) — tmux会话持久化完整教程，含配置文件和自动重连方案
3. [Running Claude Code in Docker: Because SSH is All You Need](https://consolequest.net/claude-code-docker.html) — Console Quest的Docker容器化Claude Code部署指南
4. [Claude Code Headless Mode: The Complete Self-Hosting Guide](https://amux.io/guides/claude-code-headless/) — amux.io的Headless模式深度教程，覆盖CI/CD和批量任务
5. [My Remote AI Dev Workflow: Claude Code + tmux + 4090 Server](https://www.pedroalonso.net/blog/remote-ai-dev-workflow-claude-code-tmux-4090/) — Pedro Alonso的GPU服务器远程开发实战经验

## 训练营适用性评估

| 维度 | 评分 |
|------|------|
| **适用训练营** | AI编程工具实战营、远程开发训练营、DevOps工程训练营 |
| **难度级别** | 中级（需Linux和SSH基础） |
| **预计教学时长** | 6-8小时（含实操练习） |
| **前置课程** | Claude Code基础使用、Linux命令行基础 |
| **实验环境需求** | 每人一台VPS或共享服务器实例，Tailscale账号 |
| **可拆分模块** | SSH方案（2h）+ Docker方案（2h）+ GPU云方案（2h）+ 综合实战（2h） |

> [!tip] 51学通信知识星球
> **星主：爱卫生**（微信：gprshome201101）——公众号「51学通信」创办者，19 年通信行业运维与讲师经验，著有《GPRS网络信令实例详解》《EPC原理与实践》《5G核心网原理与实践》三本纸质书（各大电商平台有售）。
> **星球定位**：深耕 5G 核心网、IMS、NFV/AI、云原生等 ICT 领域，主打运维岗位与信令分析。
> **当前规模**：5200 篇主题 / 990 个回答，198 元/年。
> **加入福利**：加入星球后请加爱卫生微信，拉您进知识星球年度陪伴与答疑群——不限量回复您的各种问题，另有群内分享。
> **AI 加持**：51学通信知识星球已作为 skill 接入 WorkBuddy，使用 deepseek-4-flash 在海量星球帖子中精准找贴、找视频、找 FAQ 和案例，做总结、找文档和 PPT 等场景全覆盖。

![51学通信知识星球海报-扫码加入](https://wiki.500nian.com/images/zhixingqiu_qrcode.png)
