多台裝置共用一個 Claude 訂閱
家裡三台 Mac——一台 MBP、兩台 MacBook Air——加上好幾個會吃 Claude 的工具,但 Claude Max 訂閱只有一份。
每台機器各自登入一次當然可以,但這樣有兩個問題:每台在 Anthropic 眼中都是獨立的一台機器(device),而且像 Hermes 這種 "不是 Claude Code" 的 client,根本碰不到 Max 的額度。
於是我把所有東西都指向同一個地方——一個跑在家裡那台 always-on(不關機)MBP 上的 cc-gateway(自己架的一層 proxy)。它是整套裡唯一握有真正 Claude Max 登入的元件,其他 client 身上都只帶一個隨手設的本地 token,碰不到真的憑證。
結果是:三個 client 共用同一份訂閱,Anthropic 那邊只看到一台 device;連 Hermes 這種講 OpenAI 格式、根本不是 Claude Code 的工具,也吃得到 Max 額度。
設計:只有一個元件碰得到真的登入
cc-gateway 跑在 MBP 上,監聽 *:8443,對家裡的 LAN 開放。它做的事只有一件核心的:手上握著從 ~/.claude/.credentials.json 讀出來的真 Max OAuth(Claude Max 訂閱的登入憑證),負責對外送請求。
其他每個連進來的東西,帶的都不是真憑證,而是一個我自己設的字串當門票,例如:
- Claude Code(MBP 本機)帶
whiletrue0x - Hermes 那條路帶
hermes-ccgateway - 看額度的 OpenUsage(不是聊天 client,只是讀額度)帶
openusage
筆電那台 Air 的 Claude Code 也帶自己的一張。gateway 認得這些票,認過了才幫你換上真的登入。所以就算哪張票外流,外面的人也只是拿到一個只能打我家 gateway 的字串,碰不到 Claude Max 帳號本身。
三個 client 怎麼連進來
| Client | 怎麼到 :8443 | 帶的 token |
|---|---|---|
| Claude Code(MBP) | 本機 127.0.0.1:8443 |
whiletrue0x |
| Claude Code(MBA) | 走 LAN,cc-switch 指過去 |
cc-gateway client token |
| Hermes(MBP) | :3457 轉接 → 生一個真 CLI → :8443 |
hermes-ccgateway |
MBP 上自己的 Claude Code 最單純,本來就是真 Claude Code,直接打本機 127.0.0.1:8443。
筆電那台(MBA)也是真 Claude Code,只是用 cc-switch(一個切換 Claude Code 連線端點的小工具)把它指到 http://dawsons-macbook-pro:8443——同一個 gateway,只是改從網路連、不是 localhost。
Hermes 那條最繞,因為它根本不是 Claude Code。
為什麼 Hermes 要先繞一圈
Max 的 OAuth 有個隱形條件:Anthropic 只認「自稱 Claude Code、而且帶對 beta header」的請求。你拿 Max 登入、但請求長得不像 Claude Code,照樣被擋。
Hermes 講的是 OpenAI 的 /v1/chat/completions 格式,怎麼看都不是 Claude Code。所以它不能直接打 gateway,得先繞一圈:
- Hermes 打本機的
claude-max-api-proxy(:3457,把 OpenAI 格式轉成 Claude Code CLI 能懂的形式) - 這個 proxy 會去生一個真正的 Claude Code CLI 子行程,由這個 CLI 蓋上「You are Claude Code…」那個身分
- CLI 再帶著
hermes-ccgateway這張票往:8443送
換句話說,gateway 真正在解的問題不是「共用一個 token」,是「讓每個 client 都長得像同一台 Claude Code」。Hermes 自己變不出那個身分,就借一個真 CLI 的身分來用。
gateway 收到請求後做的四件事
不管哪個 client 進來,gateway 收下之後都跑同一套:
- 驗票——確認帶的是我設過的 token 之一(
whiletrue0x、hermes-ccgateway、openusage這些) - 換登入——把那張假票拔掉,換上真正的 Max OAuth Bearer,再補上 Claude Code 的 beta header
- 統一 device——把
device_id一律改成同一個(我這邊是751f0615…開頭那串)。所以不管幾台機器、幾個 client 打進來,Anthropic 看到的都是同一台 device - 轉發——拔掉一個 billing header,送到
api.anthropic.com
第 3 步是整套最有意思的地方:三個 client 散在 MBP 跟一台 Air 上,到了 Anthropic 卻收斂成同一台。
對照組:另一台 Air 故意不走 gateway
家裡其實還有第二台 Air,我故意沒把它接上 gateway。它就是一般的 Claude Code,自己登入同一個 Max 帳號,直接打 api.anthropic.com,全程沒有 gateway。
差別很清楚:這台在 Anthropic 眼中是「自己一台 device」,不像走 gateway 的那三個被收斂成同一台;但帳一樣記在同一份 Max 訂閱上。
把這台擺進來當對照,gateway 多做的那些事就一目了然——device 收斂、不用每台各自存登入、讓非 Claude Code 的工具也能用。第二台 Air 就是「一般做法」,其他三個是被 gateway 取代掉的版本。
那我會注意的地方
整套最脆的點:gateway 是唯一碰得到登入的元件,而且跑在家裡那台 MBP 上。MBP 一關機或睡著,三個 client 同時斷線——憑證集中換來的乾淨,代價是全押在一台機器上。
另外老實說,把多個 client 收斂成同一個 device、還讓不是 Claude Code 的工具吃 Max 額度,本來就踩在訂閱原本設計的邊上。這是自己家裡玩的 homelab,斟酌著用。
一句話總結
一份訂閱要餵多台裝置,與其每台各自登入,不如讓一個 gateway 獨佔登入、其他人帶張假票進場。
方便是因為憑證只有一份;風險也是因為憑證只有一份。
最近開始做免費的一對一諮詢,幫你把 AI 接進自己的工作流——有需要的話可以約:https://www.dawsonwang.com/