实战: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/ssh-oauth