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 的話,流程是這樣的:
- 在 Frely 網站上開啟 My Devices(我的裝置)→ Add a computer(新增電腦),建立一條一次性安裝指令,然後貼到伺服器上執行。該權杖只能使用一次,15 分鐘後失效,而且不會儲存在伺服器上。
- 伺服器會主動連線到 Frely。你無須開啟任何連接埠。
- 在 ChatGPT、Claude 或 Codex 中連接 FrelyMCP,AI 就能在該伺服器上讀取檔案和執行指令。
這樣做帶來的改變:
- AI 手上不會有任何長期有效的金鑰。伺服器有自己的裝置身份,AI 執行的指令無法讀取它。
- 指令預設在沙盒內執行。它們只能寫入你選定的資料夾和暫存資料夾,而
~/.ssh和~/.aws這類憑證資料夾則始終無法讀取。如果伺服器無法執行沙盒,指令會被拒絕,而不是在沒有保護的情況下執行。 - 更多存取權限需要你的批准。AI 會提出請求,由你在 Frely 網站上以通行密鑰或驗證器代碼決定是否允許,以及允許多久:一個指令、12 小時,或直至裝置授權結束。AI 不能批准自己的請求。
- 隨時可以撤銷,即時生效。每次呼叫都會重新檢查授權,所以你撤銷後的下一個指令就會被拒絕。
四個令它更安全的習慣
在伺服器上,安全邊界就是「Frely 運行時所用的系統用戶,再加上沙盒」。這些選擇決定它有多穩固:
- 以專屬用戶安裝,不要用 root。例如建立
frely-ops,只給它存取你的應用程式資料夾的權限。沙盒限制的是寫入,而不是該用戶能讀取的內容,所以用戶的權限越小越好。要在無須 root 的情況下讀取系統日誌,可把該用戶加入adm和systemd-journal群組。 - 確認沙盒能正常運作。在 Linux 上安裝
bubblewrap、socat和ripgrep;frely doctor會告訴你沙盒是否可用。CentOS 7 這類較舊的系統無法執行沙盒;在這些系統上,應限時批准「在沒有沙盒的情況下執行」,而不是讓它長期開放。 - 只分享你需要的資料夾。設定
FRELY_WORKSPACE=/srv/myapp,而不是分享整個主資料夾,並讓裝置授權保持短期。 - 了解 docker 群組意味着甚麼。
docker群組中的用戶可以直接讀取docker logs,這很方便,但這個成員身份的權力等同 root。
甚麼時候 ssh 仍然無妨
如果 AI 只是讀取日誌和執行幾個唯讀指令,那麼經由你的手提電腦連線也可以接受,前提是:
- 你為這台伺服器另外建立一把獨立金鑰,在伺服器的
authorized_keys中用from=和restrict加以限制,並以權限受限的用戶登入; - 同一個
~/.ssh內沒有存放其他權力強大的金鑰; - 你只為手頭上的任務開放存取,而不是一開放就是幾天。
簡而言之
當 AI 運行你的伺服器時,關鍵往往不在它有多聰明,而在它手上拿着甚麼。與其把你的金鑰交給 AI,不如讓伺服器主動對外連線,並由你批准它可以做甚麼。