返回部落格

Comma AI 代理原生支援 SSH

開始使用閱讀文件

你家裡的伺服器已經好幾晚沒有完成備份了。日誌在伺服器上,伺服器在路由器後面,而你希望 Comma 去查清原因,而不是給你一串指令,讓你來回複製貼上。現在,Comma 的 AI 代理可以透過 SSH 直接在這台機器上工作,不必在上面再裝一個 AI 代理。

AI 代理在沙箱之外執行

大多數雲端 AI 代理都在自己的沙箱裡執行:一個容器或虛擬機器,裝著模型迴圈、工具和檔案,只要 AI 代理還在,它就一直開著。Comma 背後的分散式 AI 代理框架 Salix 把這些拆開了。AI 代理迴圈在框架中執行,不在任何沙箱裡,每個 CPU 核心能執行 100 多個 AI 代理。雲端虛擬機器或裝置只是執行指令的地方,只在工作真的需要一台電腦時才用到。

所以,要在你的伺服器上工作,AI 代理並不需要搬過去。它在框架中呼叫原生 SSH 工具:

  • ssh.open、ssh.write、ssh.read 和 ssh.screen:互動式終端機,包括全螢幕程式;

  • ssh.exec:執行單一指令,stdout、stderr 和結束狀態分開傳回;

  • ssh.list_files、ssh.download 和 ssh.upload:透過 SFTP 存取檔案;

  • ssh.close 和 ssh.list:管理連線的生命週期。

AI 代理使用 Group SSH 金鑰驗證:每個工作區一把金鑰,由工作區內的 AI 代理共用。ssh.public_key 會傳回這把金鑰,你把它加到機器上的 ~/.ssh/authorized_keys 裡,和對待其他 SSH 用戶端一樣。

框架可以透過三種方式連線到你的機器。

1. 公開位址

如果機器上已經有一個連得到的 SSH 伺服器,AI 代理就直接連線到它的 IP 位址或 DNS 名稱:

json
{ "tool": "ssh.open", "params": { "host": "203.0.113.10", "user": "deploy" } }

2. Tailcat:連線沒有公開位址的機器

NAT 後面的筆電或家用伺服器,往往沒有框架能直接連上的位址。Tailcat 不需要傳入連接埠、VPN 或帳號就能把它連上。Tailcat 在這台機器上執行,只建立對外連線,並印出一個以 tc 開頭的位址。

Tailcat 本身也可以充當 SSH 伺服器。用 Group 公開金鑰執行它:

sh
tailcat serve --ssh-authorized-keys='ssh-ed25519 AAAA...' ssh

這樣就能以執行 Tailcat 的帳號取得登入 shell、指令執行和 SFTP。它不需要 sshd,也不會更動你的 SSH 設定。如果機器上已經在執行 OpenSSH,就改用 tailcat serve 22,由 OpenSSH 處理登入。然後把位址傳給 AI 代理:

json
{ "tool": "ssh.open", "params": { "tailcat": "tc...", "user": "deploy" } }

3. 你自己的 Tailscale 網路

如果你的機器已經在一個 tailnet 裡,工作區可以加入它。你可以在 Comma 應用程式的設定中連線,也可以請 AI 代理去連線。tailnet 管理員開啟登入連結,核准這個節點即可。節點預設帶有標籤 tag:comma-agent,因此它能存取哪些裝置和連接埠,完全由你的 tailnet 政策決定,例如只允許存取家用伺服器的 22 連接埠。

AI 代理用 tailnet.peers 列出裝置,再透過 MagicDNS 名稱或 Tailscale 位址連線:

json
{
  "tool": "ssh.open",
  "params": { "host": "nas.tail1234.ts.net", "via_tailnet": true, "user": "deploy" }
}

信任與生命週期

無論走哪條路徑,第一次連線到某台主機時都會記錄它的主機金鑰。之後的連線如果出示了不同的金鑰,就會被拒絕,並傳回 host_key_mismatch 和新舊兩個指紋;AI 代理會先徵得你的同意,再用 ssh.known_hosts.remove 刪除舊金鑰。

一個 SSH 連線只屬於一個 AI 代理工作階段。它閒置 30 分鐘後關閉,也不會在 AI 代理重新啟動或平台部署後保留,所以耗時較長的工作應放進遠端機器上的 tmux 或 screen。指令都有時限:ssh.exec 預設 60 秒逾時,最長 600 秒;逾時會如實回報,絕不自動重試。

以備份問題為例,你可以這樣說:「讀一下日誌,查看磁碟空間,但不要刪除檔案,也不要改設定。先把你的發現告訴我。」

Try Comma, Now.

開始使用