實戰:SSH 遠端 OAuth 登入
Hermes 實戰教學第25篇:SSH 遠端 OAuth。遠端機器登入服務。
這篇教學教你在遠端伺服器上執行 Hermes Agent 時,如何完成 Spotify、MCP 伺服器等服務的 OAuth 登入授權。
為什麼遠端登入會失敗?
想像一下:你的瀏覽器住在「你家」(筆電),而 Hermes 住在「公司」(遠端伺服器)。OAuth 登入時,授權伺服器會把瀏覽器重新導向到 http://127.0.0.1:43827/callback——這個位址在你家的瀏覽器看來是指向你自己,但監聽這個位址的程式卻在公司的伺服器上。兩邊根本對不上,登入自然失敗。
解決辦法:打一條「隧道」,讓「你家」和「公司」之間的這個連接埠直接連通。
第 1 步:在筆電上開一條 SSH 隧道
打開筆電上的新終端機,執行:
ssh -N -L 43827:127.0.0.1:43827 使用者名稱@遠端伺服器位址
-N表示「只開隧道,不登入遠端終端機」- 這條指令會一直掛著,別關掉這個終端機
第 2 步:在遠端伺服器上發起登入
另開一個終端機,SSH 登入遠端伺服器,然後執行:
hermes auth spotify --no-browser
Hermes 會偵測到你正在 SSH 工作階段中,不會自動打開瀏覽器,而是印出一條授權連結,以及一行 Waiting for callback on http://127.0.0.1:43827/callback——記下這個連接埠號碼(可能不是 43827,以實際輸出為準)。
第 3 步:在筆電瀏覽器裡完成授權
把授權連結複製到筆電瀏覽器打開,點擊「同意」。授權伺服器會把瀏覽器重新導向到 127.0.0.1:43827/callback——此時隧道生效,請求被轉送到遠端伺服器的監聽程式,Hermes 顯示 Login successful!。看到這行字後,隧道終端機按 Ctrl+C 關掉即可。
特殊情況:MCP 伺服器(Linear、Sentry 等)
遠端 MCP 伺服器也走同樣的回環重新導向流程。如果你在互動式終端機裡操作,有個更省事的辦法:Hermes 會提示你把瀏覽器網址列裡的完整重新導向 URL(或 ?code=...&state=... 部分)貼回來,直接完成授權,完全不需要隧道。
如果你需要無人值守的自動登入,那就用上面第 1 步的 SSH 隧道方案。
經過跳板機怎麼辦?
用 SSH 的 -J 參數(ProxyJump)一步到位:
ssh -N -L 43827:127.0.0.1:43827 -J 跳板機使用者@跳板機位址 目標使用者@目標伺服器
常見坑
- 連接埠被占用:
lsof -iTCP:43827 -sTCP:LISTEN找到占用程序,kill掉再重試 - 登入逾時:確認隧道還活著(
ssh -N沒輸出是正常的),檢查連接埠號碼是否與最新輸出一致 - 權杖存錯位置:確保用執行 Hermes 服務的那個系統使用者執行登入指令(如
sudo -u hermes -i),否則權杖會存到錯誤的~/.hermes目錄
小結
SSH 隧道本質上是把「遠端的回環位址」搬到了你本機,讓瀏覽器和 Hermes 能「隔空握手」。記住:隧道終端機保持打開,授權完成後才能關閉。
下篇預告:搞定登入後,下一步就是讓 Hermes 真正跑起來——下一篇我們聊聊 「用自然語言讓 Hermes 幫你幹活」,敬請期待!
📖 官方文档
本文根据 Hermes Agent 官方文档编写,原文见:官方文档 › guides/oauth-over-ssh