termal.in

← 博客

通过 SSH 把 Google Gemini CLI 安全接入你的服务器

· Termalin Team geminimcpai-agentssshtutorial

Google 的 Gemini CLI 是一个能干的终端内代理,而和其他编码代理一样,它迟早需要离开你的笔记本、去碰一台真正的服务器——重启一个服务、tail 一份日志、在机器本身上跑部署。诱人的捷径是让它直接跑 ssh:CLI 本来就会执行 shell 命令,所以只要 ~/.ssh 里或一个在运行的 ssh-agent 里有一把解锁的密钥,无论你是否有意授予,ssh prod 对它都能用。这一句话就是全部问题所在——你默认地把完整的服务器访问拱手送了出去。

Gemini CLI 内建了一条更干净的路:它会说 MCP(英文),和 Claude Code、Cursor 以及 Codex 用的是同一个协议。Termalin 是一款内置 MCP 服务器的 SSH 客户端,所以你把 Gemini 指向那个服务器,它就能真正地操作你的主机——而代理始终不持有密钥。大约二十分钟,一台主机。

你需要什么

  • Termalin——桌面应用;Free 版就够用。它内置的 MCP 服务器就是 Gemini 要对话的对象。
  • Gemini CLI,在同一台机器上。
  • 一台主机,保存在 Termalin 里——首次运行就挑个无关紧要的。

第 1 步——打开代理访问并设定策略

代理访问默认是关闭的。在 Termalin 里打开设置 → 代理访问 (MCP),启用它,并勾选 Gemini 可以够到的主机。在代理眼里,那份列表之外的东西根本不存在——一台新主机是你在应用里做的一个决定,不是代理能靠嘴皮子挤进来的东西。

在底层,Termalin 为 MCP 服务器写一份主机清单,里面只有仅供代理用的认证条目——没有密码或密钥落进那个文件——而认证留在应用的密钥托管方(替你保管密钥、代为签名的中间层)那里:你解锁一次,Termalin 代表代理签名。没有密钥文件给 Gemini 读,所以没有什么可泄露的,上面那道 ~/.ssh 后门也随之关上。

趁你还在那里,给每台主机设定代理策略:完全访问、一份命令允许列表,或禁止。对任何你在乎的东西都从一份允许列表开始——这套最小权限设置自成一篇短文(英文)。

第 2 步——在 Gemini 的设置里注册这个服务器

Gemini CLI 从它设置文件里的 mcpServers 对象读取 MCP 服务器——给你所有项目用的是 ~/.gemini/settings.json,或者项目本地的 .gemini/settings.json。加一条指向打包的 termalin-mcp 二进制文件的条目:

{
  "mcpServers": {
    "termalin": {
      "command": "<path>/termalin-mcp"
    }
  }
}

这就是整个集成。重启 Gemini CLI(或重新加载它的 MCP 服务器),工具就会出现在代理面前:hosts_list、ssh_exec、持久会话(session_open / session_exec)、SFTP 的读写,以及端口转发。在 Gemini 里运行 /mcp,确认服务器已连接,并查看它暴露的工具。完整工具列表(英文)记录了每一个。

如果你压根不想接 MCP,还有一个更轻的选项:Termalin 有一个本地终端标签页,所以你可以直接敲 gemini,在应用里、紧挨你的 SSH 会话跑这个 CLI。那让你在同一个窗口里拥有 Gemini——但正是上面那套 MCP 设置,才让 Gemini 通过托管方在你的服务器上行动,而这一部分正是把你的密钥挡在它够不到的地方。

第 3 步——交给它一件真正的杂活

跳过演示。递给它一件真的:

staging-1 的部署完成了,但健康检查一直在抖。查清楚为什么,并修好它。

Gemini 调用 hosts_list,看到 staging-1,开启一个会话,开始顺藤摸瓜——服务状态、最后一百行日志、与正在运行的配置的差异。它提出一个修复方案,在你设定的策略内应用它,并确认检查变绿。

让这件事变得从容、而非提心吊胆的,是这一切都没有被藏起来。Gemini 开启的每个会话都会在 Termalin 里作为一个实时终端标签页出现,而**监控网格(英文)**把所有打开的会话并排放在一起,代理驱动的那些格子发着光。你看着命令实时落下,并且随时可以介入。

边界在哪里

在你把它指向任何要紧的东西之前,值得知道的几个默认行为:

  • **你的密钥从不进入 Gemini 的环境。**托管方签名;代理请求。撤销访问是设置里的一个开关,不是在你整支机群上轮换密钥。
  • 它的触及范围就是你在第 1 步勾选的那份主机列表,而每台主机的命令策略框定了它在那里能跑什么。生产环境上的“完全”仍然是一个完整的 shell——要刻意地去设它。
  • **往你自己的会话里打字是另一回事。**默认情况下 Gemini 开它自己的会话;接入一个你已经打开的会话,是它自己的一个同意开关。
  • **每条命令都有记录。**录制只捕获输出——绝不记录按键——而每条代理命令都在审计日志里被标记为代理的(英文),连同它来自的设备和 IP。

当 Gemini 在云端运行时

如果 Gemini 运行在你的桌面所不在的地方——一个 CI 任务、一个云沙箱——那个本地二进制文件就够不到了,但 Termalin 的托管 MCP 端点可以。在网页控制台里签发一个 API 密钥,把它的范围限定到正确的服务器,设成只读或一份允许列表,给它一个过期时间,再把代理指向 https://termal.in/api/v1/mcp。它无密钥地够到你通过 Connector 接入的服务器,每次运行都用一张短期证书认证——完整的 CI/CD 模式在这里(英文)。

让它固化下来的习惯

把头一周当作在带一个上手很快的新队友。让监控网格开着,给 Gemini 派有明确“完成态”的杂活,在放宽任何东西之前先读懂它是怎么做到的。这笔交易才是重点:Gemini 在你的服务器上获得真正的触及,而你守住了那一样——密钥——一旦放出去就收不回来的东西。


Termalin 是一款跨平台 SSH 客户端,内置 MCP 服务器、一个密钥托管方和按主机的代理策略——下载它,读 MCP 参考,或看它如何处理密钥。

先在一台主机上试试。

Termalin 是为你和你的智能体打造的高速 SSH 客户端。

免费版 · Pro 14 天试用 · 价格