# Claude Code 一键初始化脚本

一行命令在 **Ubuntu / Debian / CentOS / RHEL** 服务器上完成:

- 装 Node.js（NodeSource）+ Claude Code，**全程走 HTTP 代理**
- 新建系统用户 `claude`
- 给 **root** 和 **claude** 写好 `~/.claude/settings.json`（代理 / 可选 Key / effortLevel / permissions）
- 写入你的 **SSH 公钥**，MacBook 免密登录任意主机
- 可选：加固 sshd（仅密钥登录、root 禁用密码）
- 支持 **升级模式**：已装过的机器只升级 Claude Code + 重写 settings.json

---

## 快速开始（已部署，直接用）

本仓库已托管在 **https://claude.dahe2016.com**，脚本顶部已预置好配置，目标机器无需任何改动：

- 代理：已写入指定 HTTP 代理（全程下载 + settings.json 都走它）
- 认证：**官方账号订阅**（settings.json 不写 token，装完每台机各自 `claude` 登录一次）
- SSH 公钥：未配置（不做免密登录）
- sshd 加固：**关闭**（保留 root 密码登录，避免锁死）
- effortLevel：`xhigh`，并跳过危险模式二次确认

### 在任意服务器一行安装

```bash
curl -fsSL https://claude.dahe2016.com/i.sh | bash
# 非 root 环境:
curl -fsSL https://claude.dahe2016.com/i.sh | sudo bash
```

装完后，在该机分别登录（官方订阅）：

```bash
claude                       # root 身份首次登录
su - claude -c claude        # claude 用户首次登录
```

### 升级 / 重写配置（已装过的机器）

```bash
curl -fsSL https://claude.dahe2016.com/i.sh | bash -s -- upgrade
```

> 如需改代理 / 换 API Key / 加 SSH 公钥 / 开启 sshd 加固，编辑 `install-claude.sh`
> 顶部「在这里改成你自己的值」区即可，服务由 systemd 即时对外提供，无需重启。

---


## 升级 / 重新配置（已装过的机器）

只升级 Claude Code 到最新版 + 用脚本最新配置重写 settings.json，**不动** Node / 用户 / SSH / sshd：

```bash
curl -fsSL https://your.site/i.sh | bash -s -- upgrade
# 本地文件:
sudo bash install-claude.sh upgrade
```

`upgrade` 模式行为:

| 步骤 | install（默认） | upgrade |
|---|---|---|
| 装 Node / 基础依赖 | ✅ | ⏭️ 跳过 |
| 安装/升级 Claude Code | ✅ | ✅（`@latest`，并打印旧→新版本号） |
| 建 `claude` 用户 | ✅ | ⏭️ 跳过 |
| 重写 root 的 settings.json | ✅ | ✅ |
| 重写 claude 的 settings.json | ✅ | ✅（用户存在才写） |
| 写 SSH 公钥 / 加固 sshd | ✅ | ⏭️ 跳过 |

> upgrade 模式不需要填 `SSH_PUB_KEY`；想改代理/Key/effortLevel，直接改脚本顶部变量后重跑即可（原 settings.json 会自动备份）。

---

## 配置项说明（脚本顶部）

| 变量 | 默认 | 说明 |
|---|---|---|
| `PROXY` | `http://127.0.0.1:7890` | HTTP 代理，安装下载 + 写入 settings.json。支持 `http://user:pass@host:port` |
| `SSH_PUB_KEY` | 占位符 | 你 Mac 的 SSH 公钥，**必填** |
| `ANTHROPIC_BASE_URL` | 空 | 第三方中转站地址，留空用官方 |
| `ANTHROPIC_AUTH_TOKEN` | 空 | API Key / 中转 token，留空则用官方账号订阅登录 |
| `EFFORT_LEVEL` | `xhigh` | 推理强度: `low` / `medium` / `high` / `xhigh` |
| `SKIP_DANGEROUS_PROMPT` | `true` | 跳过「危险模式」二次确认（写入 `permissions`） |
| `CLAUDE_USER` | `claude` | 要创建的系统用户名 |
| `NODE_MAJOR` | `20` | Node 主版本 |
| `HARDEN_ROOT_SSH` | `true` | 是否加固 sshd（root 仅密钥登录） |

---

## 生成的 settings.json 示例

`/root/.claude/settings.json` 与 `/home/claude/.claude/settings.json`（权限 `600`）:

```json
{
  "env": {
    "HTTP_PROXY": "http://user:pass@host:8001",
    "HTTPS_PROXY": "http://user:pass@host:8001",
    "NO_PROXY": "localhost,127.0.0.1,::1"
  },
  "effortLevel": "xhigh",
  "permissions": {
    "skipDangerousModePermissionPrompt": true
  }
}
```

> 填了 `ANTHROPIC_AUTH_TOKEN` / `ANTHROPIC_BASE_URL` 时，会自动追加到 `env` 块里。

### 认证三种用法

- **官方账号订阅**：`ANTHROPIC_*` 两个都留空，装完后 root/claude 各自跑一次 `claude` 登录。
- **API Key**：只填 `ANTHROPIC_AUTH_TOKEN`。
- **第三方中转站**：同时填 `ANTHROPIC_BASE_URL` + `ANTHROPIC_AUTH_TOKEN`。

---

## 注意事项

- ⚠️ 开启 `HARDEN_ROOT_SSH="true"` 后 **root 不能再用密码登录**。务必先确认公钥填对，否则会把自己锁在门外。想保留密码登录改成 `false`。
- 代理账号密码以**明文**存在 settings.json，脚本已 `chmod 600`；多人机器请额外留意。
- 脚本是**幂等**的：重复运行会备份已有 settings.json / sshd_config，公钥已存在则跳过。
- 安装、`apt/yum`、`npm`、`curl` 全程走 `PROXY`，适合服务器本身无法直连外网的场景。

---

## 文件

- `install-claude.sh` — 一键脚本
- `README.md` — 本文档
