FRELY / BLOG

讓 AI 協助運行你的伺服器,而無須交出你的 SSH 金鑰

越來越多人讓 AI 助手讀取日誌、修改設定檔和重新啟動服務。最直接的做法,是在你自己的電腦上運行一個能夠執行指令的 AI,再讓它用 ssh 連入伺服器。

這樣做行得通。但有一個細節值得停下來留意:要讓 AI 執行 ssh,你便把整個 ~/.ssh 資料夾交了給它。

經由手提電腦:你交出的比你以為的更多

要讓 AI 在你的電腦上執行 ssh prod,它必須讀取 ~/.ssh 內的設定和私鑰。大部分權限控制只能決定一個資料夾可否讀取,無法指定「只限這一台伺服器」。這意味着:

  • 它可以讀取每一把私鑰,而不只是這台伺服器的那一把。
  • 只要它的指令能夠連上網絡,金鑰就有機會離開你的電腦。金鑰一旦外洩便仍然有效,事後關掉 AI 的存取權限也拿不回來;你必須從每台伺服器上移除對應的公鑰。
  • 一旦 ssh 登入,AI 在伺服器上能做甚麼,便取決於該金鑰背後的帳戶。如果是 root,AI 就有 root 權限。

伺服器的日誌只會顯示「你的手提電腦用你的金鑰登入」,無法分辨哪些指令出自你、哪些出自 AI。

反過來做:讓伺服器主動對外連線

與其把開啟伺服器大門的金鑰交給 AI,不如在伺服器上安裝一個小型程式,讓伺服器主動連線到你的 AI 帳戶,並由你決定 AI 可以在那裏做甚麼。

用 Frely 的話,流程是這樣的:

  1. 在 Frely 網站上開啟 My Devices(我的裝置)→ Add a computer(新增電腦),建立一條一次性安裝指令,然後貼到伺服器上執行。該權杖只能使用一次,15 分鐘後失效,而且不會儲存在伺服器上。
  2. 伺服器會主動連線到 Frely。你無須開啟任何連接埠。
  3. 在 ChatGPT、Claude 或 Codex 中連接 FrelyMCP,AI 就能在該伺服器上讀取檔案和執行指令。

這樣做帶來的改變:

  • AI 手上不會有任何長期有效的金鑰。伺服器有自己的裝置身份,AI 執行的指令無法讀取它。
  • 指令預設在沙盒內執行。它們只能寫入你選定的資料夾和暫存資料夾,而 ~/.ssh 和 ~/.aws 這類憑證資料夾則始終無法讀取。如果伺服器無法執行沙盒,指令會被拒絕,而不是在沒有保護的情況下執行。
  • 更多存取權限需要你的批准。AI 會提出請求,由你在 Frely 網站上以通行密鑰或驗證器代碼決定是否允許,以及允許多久:一個指令、12 小時,或直至裝置授權結束。AI 不能批准自己的請求。
  • 隨時可以撤銷,即時生效。每次呼叫都會重新檢查授權,所以你撤銷後的下一個指令就會被拒絕。

四個令它更安全的習慣

在伺服器上,安全邊界就是「Frely 運行時所用的系統用戶,再加上沙盒」。這些選擇決定它有多穩固:

  1. 以專屬用戶安裝,不要用 root。例如建立 frely-ops,只給它存取你的應用程式資料夾的權限。沙盒限制的是寫入,而不是該用戶能讀取的內容,所以用戶的權限越小越好。要在無須 root 的情況下讀取系統日誌,可把該用戶加入 adm 和 systemd-journal 群組。
  2. 確認沙盒能正常運作。在 Linux 上安裝 bubblewrap、socat 和 ripgrep;frely doctor 會告訴你沙盒是否可用。CentOS 7 這類較舊的系統無法執行沙盒;在這些系統上,應限時批准「在沒有沙盒的情況下執行」,而不是讓它長期開放。
  3. 只分享你需要的資料夾。設定 FRELY_WORKSPACE=/srv/myapp,而不是分享整個主資料夾,並讓裝置授權保持短期。
  4. 了解 docker 群組意味着甚麼。docker 群組中的用戶可以直接讀取 docker logs,這很方便,但這個成員身份的權力等同 root。

甚麼時候 ssh 仍然無妨

如果 AI 只是讀取日誌和執行幾個唯讀指令,那麼經由你的手提電腦連線也可以接受,前提是:

  • 你為這台伺服器另外建立一把獨立金鑰,在伺服器的 authorized_keys 中用 from= 和 restrict 加以限制,並以權限受限的用戶登入;
  • 同一個 ~/.ssh 內沒有存放其他權力強大的金鑰;
  • 你只為手頭上的任務開放存取,而不是一開放就是幾天。

簡而言之

當 AI 運行你的伺服器時,關鍵往往不在它有多聰明,而在它手上拿着甚麼。與其把你的金鑰交給 AI,不如讓伺服器主動對外連線,並由你批准它可以做甚麼。

開始使用 Frely CLI

All posts