跳到主要內容

通過 SSH 完成 OAuth

有些 Hermes provider 會使用 loopback redirect OAuth,例如 xAI Grok OAuth、Spotify,以及 Linear、Sentry、Atlassian、Asana、Figma 等遠程 MCP server。它們會把瀏覽器重定向到類似 http://127.0.0.1:<port>/callback 的地址,讓 Hermes 啟動的小 HTTP listener 接收授權碼。

當 Hermes 和瀏覽器在同一臺機器上時,這很簡單。問題出在遠程機器:你的瀏覽器訪問的是本地電腦的 127.0.0.1,但 listener 其實在遠程服務器上。

SSH 端口轉發

解決方法是做本地端口轉發。以 xAI OAuth 的默認端口 56121 為例:

# 在本地電腦新開一個終端
ssh -N -L 56121:127.0.0.1:56121 user@remote-host

# 在已經登錄的遠程 SSH 會話中運行
hermes auth add xai-oauth --no-browser

Hermes 會打印授權 URL。把它複製到本地瀏覽器打開,瀏覽器回調到本地 127.0.0.1:56121 後,SSH 隧道會把請求轉發給遠程 Hermes listener。

Spotify 常用端口是 43827。MCP server 可能自動選擇端口,實際端口以 Hermes 輸出的 Waiting for callback on ... 為準。

沒有 SSH 客戶端怎麼辦?

如果你在 GCP Cloud Shell、GitHub Codespaces、EC2 Instance Connect、Gitpod 或瀏覽器 Web IDE 裡操作,可能沒有可用的本地 SSH 客戶端。這時使用 --manual-paste

hermes auth add xai-oauth --manual-paste

流程是:

  1. Hermes 打印授權 URL;
  2. 你在本地瀏覽器打開並授權;
  3. 瀏覽器跳轉到 127.0.0.1 失敗,這是正常現象;
  4. 從瀏覽器地址欄複製完整回調 URL;
  5. 粘貼回 Hermes 的 Callback URL: 提示處。

Hermes 接受完整 URL、?code=...&state=... 查詢片段,或上游頁面直接展示的 code。這個方式只是改變回調傳輸方式,不降低 OAuth 本身的 PKCE、state 和 nonce 校驗。

哪些 provider 需要這樣做?

Provider常見端口遠程運行時是否需要處理
xai-oauth56121需要 SSH 轉發或 manual paste
Spotify43827需要 SSH 轉發或 manual paste
OAuth MCP server自動選擇需要 SSH 轉發或 paste 回調 URL
Anthropic Claude Pro / Max不適用不需要,使用 paste code
OpenAI Codex / ChatGPT Plus / Pro不適用不需要,使用 device code
MiniMax、Nous Portal不適用不需要,使用 device code

參考鏈接