把多台機器收斂成同一個身份






有人付了快一年的 $200/月 Claude 訂閱,手上三台機器一直用得好好的。某天他在第四台登入——帳號直接被封。沒警告、沒解釋、沒退費。他人在美國以外,連申訴管道都沒有,這個 ban 是永久而且無聲的。他氣到自己寫了一個反向代理(reverse proxy,夾在你跟伺服器中間、幫你改寫請求的那層),叫 cc-gateway,GitHub 上 MIT 授權、還在 alpha。它做的事是:把他所有裝置「收斂」成同一個 Claude Code 身份——讓 Anthropic 那邊看起來就是一個人、一台機器在用。
接續 Day 154——那篇拆了 Claude Code 怎麼證明「你是你」(access token、refresh token、Bearer header)。這篇接著看另一層:每次請求其實還夾帶了一大包「這台機器是誰」的指紋,cc-gateway 做的就是把這包指紋整個改寫掉。這篇不是教你怎麼裝,是一個比技術更難回答的判斷題:作者一直強調「這不是破解」,這條界線站得住嗎。
Claude Code 其實洩漏了多少
先講為什麼「多台機器」會是問題。你以為 Claude Code 送出去的只有那把 token,其實每個請求還夾了一整包關於你這台電腦的描述。cc-gateway 的 README 列出它會正規化(normalize,把不同來源的值統一成一個標準格式)的東西,大概是這些:
- device_id 跟登入的 email——直接標出「哪台機器、誰的帳號」。
- 一整個 env 物件,40 幾個欄位:作業系統、CPU 架構、Node 版本、你用哪個終端機、裝了哪些套件管理器、哪些 runtime、是不是在 CI 裡跑……
- 塞進 system prompt 的那段
<env>區塊——Platform、Shell、OS 版本、你的工作目錄,連/Users/你的名字/這種家目錄路徑都在裡面。 - 程序的記憶體數字:實體 RAM 多大、當下用了多少(rss/heap 那些)。
- User-Agent 帶的 Claude Code 版本號,還有一個 billing header。
把這些湊起來,Anthropic 不需要你的名字,也能很有把握地說「這四個 session 是同一個人的四台不同機器」。第四台被 ban,就是這麼來的。
cc-gateway 的解法:全部改寫成同一套標準值
它的做法不是「藏起來」,是「全部講成同一套」。每個欄位都改寫成一個固定的標準值(canonical profile,一套對外統一的假身份檔):
- device_id、email → 統一成同一個。
- 那整包 env → 整個換掉,不是補丁式地改幾個欄位,是 40 幾個一起換成同一套。
- system prompt 裡的
<env>區塊、家目錄路徑 → 改成標準值。 - 記憶體數字 → 實體 RAM 講成固定值,其他則在一個合理範圍內隨機——免得每次都一模一樣反而更可疑。
- User-Agent → 統一成同一個 Claude Code 版本;那個 billing header 直接拿掉。
- 連 baseUrl、gateway 這種「我有掛代理」的痕跡欄位也清掉,不讓對方看出中間多了一層。
- 所有流量走同一個固定 IP 出去。
結果就是:你三台、四台機器,在 Anthropic 眼裡全部長成同一台、同一個人。
它怎麼接上去
接法很單純:給每台機器一個 launcher,把環境變數 ANTHROPIC_BASE_URL 指到 gateway——Claude Code 就乖乖把請求送到 gateway,而不是直接打 api.anthropic.com。這也是大部分第三方 gateway 接 Claude Code 的標準做法。Gateway 收到後,改寫完那包指紋,再注入真正的 OAuth token,轉發給 Anthropic。
Token 這塊它做得滿細的,剛好對得上 Day 154 講的 access/refresh 那套:啟動時直接讀 Keychain 裡現成的 access token(不先打網路),快過期前 5 分鐘才去 platform.claude.com 換新的,換失敗就每 30 秒重試。等於把「續命」這件事,從每台機器各做一次、收斂成 gateway 集中做一次。
操作介面是一個 ccg 指令:
ccg # 透過 gateway 開 Claude Code
ccg hijack # 讓你原本的 claude 指令也改走 gateway
ccg release # 還原成原生 claude
ccg native # 這次跳過 gateway、直接用原生
ccg status # 看連線跟 hijack 狀態
hijack 是 opt-in 而且可逆——你不主動開,原本的 claude 不受影響;要還原 ccg release 一行就回去。zsh/bash/fish 都支援。
作者堅持「這不是破解」——這條界線站得住嗎
這是我覺得最值得拿出來談的部分,因為它不是技術問題,是判斷問題。
作者的說法很清楚:這不是 hack、不是 crack。它沒破 rate limit、沒共享帳號、沒偷服務。它只是讓「我自己、我付錢的訂閱、我自己那幾台機器」對一個我本來就付費的 API 呈現一致的身份。他特別強調「沒有規避」——沒假造地點、沒輪換 IP、沒繞流量限制。他的原話是:流量看起來很正常,因為它本來就正常。
這套說法有它的道理。silent ban、永久、非美國用戶連申訴都沒有——這是 Anthropic 真實存在、而且挺難看的一個問題。一個人付了快一年全額訂閱,因為在自己第四台機器上登入就被無聲清掉,換誰都會火。
但另一面也得講清楚:cc-gateway 之所以有效,正是因為它打掉了 Anthropic 用來「認出多裝置」的那套指紋偵測。Anthropic 對「一個訂閱能在幾台機器上跑」做限制,本來就是它防濫用機制的一部分。所以「這不是規避」這句,要看你怎麼定義規避——你沒假造地點、沒共享帳號,這是真的;但你確實是在主動讓一個偵測機制失效,好繞過它對你做的限制。「我付錢了」不會讓這個問題消失。
README 自己其實也留了後路:MIT 授權,但寫明「僅供教育與研究」、別拿去違反 Anthropic 的服務條款、別商用、作者不負任何責任、風險自負。那行「別違反 ToS」跟這個工具本身的用途之間,張力是肉眼可見的。
那到底該不該碰
我不會叫你裝。我只說它是什麼、風險在哪。
如果你就是那種一個人、好幾台機器、合法付費、又被 ban 過或在怕被 ban 的人,你會懂作者的動機。但有三件事得先想清楚:
- 它還在 alpha(v0.2.0),而且這是一場貓抓老鼠——Claude Code 每次更新都可能加新的遙測欄位,gateway 就得跟著補。README 也老實寫了,像 mcp-proxy 那條是寫死的、根本繞不過 gateway。
- 原本你是因為「多裝置」被 ban;用了這個,萬一哪天被認出來,理由會升級成「規避偵測」——那是更難辯的一條。
- 你省下的是重新登入的麻煩,賭上的是整個訂閱。這個賠率自己算。
一句話總結:Day 154 拆的是 Claude Code 怎麼證明「你是你」;cc-gateway 反過來,讓你每台機器都證明自己是「同一個你」。技術很漂亮——但它打掉的那道偵測,正好就是你那份訂閱條款在守的東西。
Sources:
- cc-gateway(motiful/cc-gateway,MIT、alpha):https://github.com/motiful/cc-gateway
- 上一篇 Day 154 拆解 Claude Code 登入機制:https://dawsonwang.com/day/154