Skip to content

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

24 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

cc-reset

一个面向 Linux VPS 的 Claude Code 一键初始化与 OAuth 登录辅助工具。

支持的发行版:

  • RHEL 系:OpenCloudOS / RHEL / CentOS Stream(通过 dnf / yum
  • Debian 系:Ubuntu / Debian(通过 apt-get + NodeSource)

目标场景:

  • 新买的 VPS,机器上几乎只有 git
  • 你想尽快把 Claude Code 环境装好,并完成 SSH 场景下的登录

背景说明

Claude Code 在 SSH/VPS 场景下的登录流程与桌面端不同:它无法自动打开浏览器完成 OAuth 回调,用户需要手动复制授权链接、在本地浏览器完成授权、再把回调 URL 粘贴回终端。

cc-reset 的目标就是把这个流程自动化:

  1. 生成 PKCE OAuth 授权链接
  2. 引导用户完成浏览器授权
  3. 接收回调参数,完成 token 交换
  4. 将凭证写入正确的位置,让 Claude Code 可以直接使用

谁需要跑 cc-reset?

只需要 root(或任意 sudoer)在机器上跑一次。 普通 Linux 用户不需要(也没权限)跑 cc-reset install —— 安装完成后:

  • node / npm / claude 都在 /usr/bin/usr/local/bin,所有系统用户的默认 PATH 都能看到
  • 新创建的普通账号登录后直接 claude 即可,不需要再跑 cc-reset、不需要再装 Node、不需要再 npm install
  • 如果你想让多个用户共享同一份 OAuth 凭证(登录一次、所有账号都能用),参见同作者的 claude-share

唯一需要每个用户各自跑一次的是 claude /login(把自己的 OAuth token 写到 ~/.claude/.credentials.json)—— 除非你用 claude-share 共享凭证,否则每个用户都要走一遍这个流程。cc-reset 本身不需要再跑。

功能

  • 一键安装系统依赖(自动识别 dnf / yum / apt-get
  • 安装 Node 20 到系统位置:RHEL 系从发行版仓库装 nodejs20,Debian/Ubuntu 系通过 NodeSource 脚本安装
  • node / npm / npx 软链到 /usr/local/bin所有系统用户可用
  • 通过 sudo npm install -g 全局安装最新 @anthropic-ai/claude-code(二进制落在 /usr/bin/claude
  • 从 v0.1/v0.2 升级时,自动清理 ~/.bashrc 里残留的 cc-reset-nvm shell 启动 block
  • 提供 doctor 环境检查
  • 提供 OAuth 手动登录辅助:
    • 输出授权链接
    • 尝试复制链接
    • 支持粘贴最终回调 URL
    • 自动完成 token exchange
    • 订阅模式 token 写入 ~/.claude/.credentials.json
    • API key 模式写入 ~/.config/cc-reset/env.sh
    • 已认证时自动跳过重复登录
  • 提供 git 仓库初始化 / remote 配置辅助
  • 提供一键发布脚本
  • 提供 CHANGELOG.md

版本记录

  • 变更记录见:CHANGELOG.md

项目结构

bin/cc-reset          # 主 CLI
lib/common.sh         # shell 公共函数
lib/oauth-helper.mjs  # OAuth / PKCE helper

快速开始

0) 只有 git 时的一条命令

如果机器上几乎只有 git,直接执行下面这一条:

REPO_DIR="${HOME}/.cc-reset" && \
([ -d "$REPO_DIR/.git" ] && git -C "$REPO_DIR" fetch --depth=1 origin main && git -C "$REPO_DIR" reset --hard origin/main || git clone --depth=1 https://github.com/yiancode/cc-reset.git "$REPO_DIR") && \
"$REPO_DIR/scripts/bootstrap-login.sh"

这条命令会:

  • 拉取或更新最新代码
  • 安装系统依赖
  • 尝试安装 xclip 以支持 Linux 终端复制链接
  • 从 dnf 装 Node 20,全局装 Claude Code(所有系统用户可用)
  • 如果尚未认证则进入 login
  • 如果已认证则自动跳过重复登录

你只需要:

  1. 复制终端给出的链接到外部浏览器
  2. 登录后拿到回调 URL
  3. 粘贴回 VPS

如果你想在一条命令里预填邮箱:

REPO_DIR="${HOME}/.cc-reset" && \
([ -d "$REPO_DIR/.git" ] && git -C "$REPO_DIR" fetch --depth=1 origin main && git -C "$REPO_DIR" reset --hard origin/main || git clone --depth=1 https://github.com/yiancode/cc-reset.git "$REPO_DIR") && \
"$REPO_DIR/scripts/bootstrap-login.sh" -- --email you@example.com

如果你要强制重新登录:

REPO_DIR="${HOME}/.cc-reset" && \
([ -d "$REPO_DIR/.git" ] && git -C "$REPO_DIR" fetch --depth=1 origin main && git -C "$REPO_DIR" reset --hard origin/main || git clone --depth=1 https://github.com/yiancode/cc-reset.git "$REPO_DIR") && \
"$REPO_DIR/scripts/bootstrap-login.sh" -- --force

如果你想让仓库直接帮你生成这条 one-liner:

./scripts/print-quickstart.sh
./scripts/print-quickstart.sh --email you@example.com
./scripts/print-quickstart.sh --force
./bin/cc-reset quickstart

1) 拉取仓库

git clone <your-repo-url>
cd cc-reset
chmod +x bin/cc-reset

2) 安装环境

./bin/cc-reset install

它会完成:

  • 基础依赖安装(git / curl / wget / make / tar / gcc)
    • RHEL 系:dnf/yum install -y git curl wget gcc-c++ make tar
    • Debian/Ubuntu 系:apt-get install -y git curl wget g++ make tar
  • 安装 Node 20:
    • RHEL 系:dnf install -y nodejs20 nodejs20-npm,binaries 在 /usr/bin/node-20
    • Debian/Ubuntu 系:NodeSource 脚本 setup_20.x,binaries 在 /usr/bin/node
  • node / npm / npx 软链到 /usr/local/bin/{node,npm,npx}
  • sudo npm install -g @anthropic-ai/claude-code@latest 装到系统路径,所有系统用户共用同一份 claude 二进制
  • 清理 v0.1/v0.2 遗留的 cc-reset-nvm shell 启动 block(不删除 ~/.nvm 本身,保留给你自己处理)

安装完成后,可检查:

./bin/cc-reset doctor
claude --version

3) 完成登录

./bin/cc-reset login

流程:

  1. 终端输出授权链接
  2. 在你本地浏览器中打开该链接并完成登录
  3. 浏览器最终跳转到类似下面的地址:
https://platform.claude.com/oauth/code/callback?code=...&state=...
  1. 完整回调 URL 粘贴回 VPS 终端
  2. 工具会:
    • 交换 OAuth token
    • 订阅模式写入 ~/.claude/.credentials.json
    • API key 模式写入 ~/.config/cc-reset/env.sh
    • 同步更新 Claude 全局配置中的 onboarding 状态

4) 验证登录状态

claude auth status --text
./bin/cc-reset doctor

如果是 API key 模式,再执行:

source ~/.config/cc-reset/env.sh

命令说明

install

./bin/cc-reset install
./bin/cc-reset install --dry-run
./bin/cc-reset install --no-clipboard
  • --dry-run:只打印计划动作,不真正执行
  • 默认会尝试安装 xclip,用于 Linux 终端复制登录链接
  • 如不需要,可加 --no-clipboard

doctor

./bin/cc-reset doctor
./bin/cc-reset doctor --json

检查项:

  • OS / package manager
  • git / curl / wget / gcc / make
  • Node sourcesystem (nodejs20) / nvm (legacy) / missing
  • node / npm
  • claude
  • ~/.claude/.credentials.json 是否存在

login

./bin/cc-reset login
./bin/cc-reset login --print-url
./bin/cc-reset login --callback-url 'https://platform.claude.com/oauth/code/callback?code=...&state=...'
./bin/cc-reset login --code-state '<code>#<state>'
./bin/cc-reset login --email you@example.com
./bin/cc-reset login --force
./bin/cc-reset login --no-clipboard

说明:

  • --print-url:只生成登录链接,不进入完成阶段
  • --callback-url:直接喂给回调 URL
  • --code-state:如果你拿到的是 code#state 形式,也可以直接完成
  • --email:预填登录邮箱
  • 默认会先检查是否已认证;如需强制重新认证,使用 --force
  • 默认会尝试安装 xclip;如不需要,可用 --no-clipboard

quickstart

./bin/cc-reset quickstart
./bin/cc-reset quickstart --email you@example.com
./bin/cc-reset quickstart --force

repo-init

./bin/cc-reset repo-init
./bin/cc-reset repo-init --remote https://github.com/yiancode/cc-reset.git

故障排查

1. 登录后仍然 401

检查是否有旧的环境变量残留(v0.1.0 遗留问题):

env | grep CLAUDE_CODE_OAUTH

如果有输出,说明当前 shell 仍加载着旧值。处理方式:

unset CLAUDE_CODE_OAUTH_TOKEN
unset CLAUDE_CODE_OAUTH_REFRESH_TOKEN
unset CLAUDE_CODE_OAUTH_SCOPES
exec "$SHELL" -l

然后重新运行:

./bin/cc-reset login --force

2. install 提示不是 Linux

在 macOS / Windows 上请用 --dry-run 预览:

./bin/cc-reset install --dry-run

3. 浏览器回调 URL 解析失败

请确认你粘贴的是完整 URL:

https://platform.claude.com/oauth/code/callback?code=...&state=...

或者直接粘贴 <code>#<state> 形式。

设计说明

为什么 token 写入 credentials.json 而不是环境变量?

环境变量持久化 token 有一个根本性的缺陷:过期的 token 会一直存在于 shell 环境中,并覆盖通过其他方式获取的新 token

Claude Code 原生的 ~/.claude/.credentials.json 支持 refresh token 自动续期,token 过期后会静默刷新,无需用户手动干预。写入这个文件与 claude /login 原生登录完全兼容,是更正确、更稳定的做法。

为什么不用本地监听端口接回调?

因为目标是 VPS + SSH 场景,本地端口在远程服务器上无法被浏览器回调访问。手动粘贴回调 URL 虽然多一步操作,但在 SSH 场景下是最通用、最不依赖额外配置的方案。

License

MIT

About

No description, website, or topics provided.

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages