一个面向 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 的目标就是把这个流程自动化:
- 生成 PKCE OAuth 授权链接
- 引导用户完成浏览器授权
- 接收回调参数,完成 token 交换
- 将凭证写入正确的位置,让 Claude Code 可以直接使用
只需要 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-nvmshell 启动 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
如果机器上几乎只有 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 - 如果已认证则自动跳过重复登录
你只需要:
- 复制终端给出的链接到外部浏览器
- 登录后拿到回调 URL
- 粘贴回 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 quickstartgit clone <your-repo-url>
cd cc-reset
chmod +x bin/cc-reset./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
- RHEL 系:
- 安装 Node 20:
- RHEL 系:
dnf install -y nodejs20 nodejs20-npm,binaries 在/usr/bin/node-20 - Debian/Ubuntu 系:NodeSource 脚本
setup_20.x,binaries 在/usr/bin/node
- RHEL 系:
- 把
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-nvmshell 启动 block(不删除~/.nvm本身,保留给你自己处理)
安装完成后,可检查:
./bin/cc-reset doctor
claude --version./bin/cc-reset login流程:
- 终端输出授权链接
- 在你本地浏览器中打开该链接并完成登录
- 浏览器最终跳转到类似下面的地址:
https://platform.claude.com/oauth/code/callback?code=...&state=...
- 把 完整回调 URL 粘贴回 VPS 终端
- 工具会:
- 交换 OAuth token
- 订阅模式写入
~/.claude/.credentials.json - API key 模式写入
~/.config/cc-reset/env.sh - 同步更新 Claude 全局配置中的 onboarding 状态
claude auth status --text
./bin/cc-reset doctor如果是 API key 模式,再执行:
source ~/.config/cc-reset/env.sh./bin/cc-reset install
./bin/cc-reset install --dry-run
./bin/cc-reset install --no-clipboard--dry-run:只打印计划动作,不真正执行- 默认会尝试安装
xclip,用于 Linux 终端复制登录链接 - 如不需要,可加
--no-clipboard
./bin/cc-reset doctor
./bin/cc-reset doctor --json检查项:
- OS / package manager
- git / curl / wget / gcc / make
- Node source:
system (nodejs20)/nvm (legacy)/missing - node / npm
- claude
~/.claude/.credentials.json是否存在
./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
./bin/cc-reset quickstart
./bin/cc-reset quickstart --email you@example.com
./bin/cc-reset quickstart --force./bin/cc-reset repo-init
./bin/cc-reset repo-init --remote https://github.com/yiancode/cc-reset.git检查是否有旧的环境变量残留(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在 macOS / Windows 上请用 --dry-run 预览:
./bin/cc-reset install --dry-run请确认你粘贴的是完整 URL:
https://platform.claude.com/oauth/code/callback?code=...&state=...
或者直接粘贴 <code>#<state> 形式。
环境变量持久化 token 有一个根本性的缺陷:过期的 token 会一直存在于 shell 环境中,并覆盖通过其他方式获取的新 token。
Claude Code 原生的 ~/.claude/.credentials.json 支持 refresh token 自动续期,token 过期后会静默刷新,无需用户手动干预。写入这个文件与 claude /login 原生登录完全兼容,是更正确、更稳定的做法。
因为目标是 VPS + SSH 场景,本地端口在远程服务器上无法被浏览器回调访问。手动粘贴回调 URL 虽然多一步操作,但在 SSH 场景下是最通用、最不依赖额外配置的方案。
MIT