2026 雲端 Mac SSH 強制命令與承包商:authorized_keys 模式如何在租用的 Apple Silicon 上通過稽核
安全與平台團隊在租用 Apple Silicon Mac mini、並讓承包商與員工共用同一登入入口時,常繼承一份「人人一把公鑰、人人一個完整 shell」的 ~/.ssh/authorized_keys。2026 年可執行的結論是:為每一把承包商金鑰單獨疊加 command=、restrict 以及明確的 no-port-forwarding;以腳本化負向測試驗證行為;並在接受指紋時把 CMDB 租約編號一併寫入日誌。 本文提供「包裝腳本 vs git-shell」的模式矩陣、五欄能力評分卡、面向 MacLogin 香港、日本、韓國、新加坡、美國機房的七步上線流程,以及可直接貼進 SOC2 證據包的 FAQ 表述。
在把金鑰寫進 authorized_keys 之前,請先完成 首次 SSH 主機信任清單;若仍允許多人互動式 shell,請同步閱讀 共用工作階段治理清單。連線與排除細節見 說明中心,節點與方案比較見 定價頁;當必須有人點擊 macOS 同意視窗時,再用 VNC 輔助,而不是擴大 shell 權限。
誰需要在租用的雲端 Mac 上使用強制命令
強制命令不只是給匿名 CI 機器人用。在共享 Apple Silicon 主機上,當採購來不及「一人一租約」時,它往往是最便宜的補償性控制。
- 受監管 SaaS 廠商需要證明:唯讀 Git 存取不能演變成對 VPC 的埠掃描。
- 行動發佈團隊要給暫時上傳權限,但不能交出具備 sudo 能力的互動式 shell。
- AI 自動化小組希望部署金鑰只能觸發單一編排腳本,而不是任意探索終端機。
- 託管服務商管理大量 MacLogin 租約時,需要可重複的金鑰註解,能對應到工單號。
哪些訊號說明「一般 shell 權限過大」
- 承包商金鑰出現在超過三個主機群組卻沒有輪替日期——典型的範圍蔓延。
- 鑑識顯示本應唯讀拉程式碼的帳號出現
ssh -R。 - 滲透測試透過本機轉發存取內部管理 API,即便密碼登入已關閉。
- 合規問卷追問「命令白名單」,而你們的答案仍停留在「我們用 SSH 金鑰」。
command="..." 的引號一旦寫錯,該金鑰會直接不可用。請以 sudo -e 編輯並納入版本控制,先用一次性測試金鑰驗證,再碰觸生產身分。模式矩陣:包裝腳本與子系統
| 情境 | 首選模式 | 為何較易過審 | 雲端 Mac 注意點 |
|---|---|---|---|
| 供應商唯讀 Git over SSH | git-shell -c 或託管方建議的 git-shell 作為強制命令 | 上游文件已定義 argv 形態 | 若政策要求隔離,儲存庫路徑不要落在承包商家目錄內 |
| 單一用途 CI 成品拉取 | 小型 Python 或 bash 包裝,校驗 argv[1] 是否在白名單 | 稽核人員可在 Git 中比對兩個版本 | 直譯器版本要釘死;系統 Python 升級可能靜默破壞入口 |
| 48 小時應急管理員 | 單獨的無限制金鑰,註解寫清到期與摘除告警 | 時間邊界清楚 | 到期後不要重用同一公鑰材料——輪替指紋 |
| 經堡壘轉送的遙測 | 僅在網路政策已阻斷橫向移動時,使用類似 /usr/bin/cat 的最小接收端 | 攻擊面最小 | 仍需在 sshd 層配套 TCP 轉發政策 |
能力評分卡:該疊加哪些選項
| authorized_keys 選項組合 | 埠轉發 | PTY | 類 scp 上傳 | 代理轉發 | 典型殘餘風險 |
|---|---|---|---|---|---|
僅 restrict | 組合內通常停用 | 通常停用 | 需顯式放行路徑 | 通常停用 | 低——仍需核對 OpenSSH 版本 |
command= + 手動停用項 | 取決於是否撰寫 no-port-forwarding | 可設定 | 包裝需白名單 | 建議加 no-agent-forwarding | 中——編輯時的人為失誤 |
| 無限制金鑰(基線) | 除非 sshd 禁止否則允許 | 允許 | 允許 | 常允許 | 高——不適合承包商 |
ssh -G 的有效選項基線;統計 24 小時內命中該金鑰的不同來源 IP 數量(個人通常少於 5);量測互動式工作階段的中位數時長——超過 45 分鐘 往往代表有人在 shell 裡做超出自動化預期的工作。面向 MacLogin 雲端 Mac 生產環境的七步上線
- 盤點: 匯出目前金鑰與註解;缺少負責人、到期日與工單號的金鑰一律退回。
- 分類: 將金鑰標記為 人類互動、機器唯讀 或 應急;僅第一類保留完整 shell。
- 起草段落: 機器類金鑰前綴寫成
restrict,command="/usr/local/bin/ci-git-bridge.sh"風格——路徑依包裝腳本實際位置調整。 - 語法自檢: 在允許的環境執行
sshd -T,並以拋棄式使用者驗證 sshd 仍能啟動。 - 負向測試: 從承包商筆電嘗試
ssh -o RequestTTY=yes、白名單外的scp、以及-R轉發——必須失敗閉合。 - 金絲雀視窗: 先在單一 MacLogin 區域(例如東京)觀察 72 小時,再推廣到香港與新加坡副本。
- 證據包: 附上 diff、測試終端機輸出摘錄,以及統一日誌裡「僅出現預期命令」的證明。
git-shell 與自訂包裝:如何快速決策
當合法活動只有 Git 協定流量時,git-shell 能節省工程時間,因為它已理解 git-upload-pack 等呼叫形態。一旦需要呼叫 /usr/bin/defaults、與 Xcode API 互動、或在多儲存庫間依 ACL 分發,請改用簽章包裝腳本,記錄 argv、來源 IP 與租約主機名。
包裝腳本的日誌建議
向權限為 0600 的檔案寫入結構化 JSON 行,或透過 logger 送入統一日誌;欄位包含 MacLogin 區域碼(HK、JP、KR、SG、US),便於下游 SIEM 路由。
稽核欄位清單:審核方真正會要的證據
| 證據類型 | 最短保留 | 負責人 | 備註 |
|---|---|---|---|
| authorized_keys 版本 diff | 365 天 | 平台團隊 | 關聯變更工單 SSH-FRC-2026 |
| 負向測試終端機紀錄 | 180 天 | 應用安全 | 展示被阻擋的轉發嘗試 |
| sshd 公鑰接受日誌 | 90 天 | SOC | 與承包商名冊刷新關聯 |
常見問題
sshd_config 裡的 Match User 能否取代 per-key 選項? Match 區塊粒度粗;當同一 UNIX 帳號混合 CI 與人類時,per-key command= 更可擴充。
FIDO2 硬體金鑰呢? 硬體背書不會取消強制命令需求——認證層與命令層是兩件獨立的事。
承包商還能用 VS Code Remote SSH 嗎? 只有在你顯式設計時才現實;Remote SSH 往往依賴埠轉發與 PTY,應視為單獨的金鑰類別。
為何 Mac mini M4 適合在 MacLogin 上做強制命令實驗
Apple Silicon Mac mini 與開發者在桌面的 OpenSSH、launchd 行為一致,意味東京機房的包裝腳本表現,與新加坡稽核截圖中的行為可對齊。M4 的統一記憶體讓並行的 git 封包傳輸與輕量 Python 校驗保持回應;若未來強制命令要呼叫端側 ML 校驗,Neural Engine 也預留了空間。透過 MacLogin 按區域租用,可在香港、日本、韓國、新加坡、美國複製同一份已知良好的 authorized_keys 範本,而無需囤積備機;純 SSH 工作流可與偶發的 VNC 搭配處理 TCC 視窗,而不必擴大承包商的 shell 權利。
當單一租約承載不下時,透過 定價 升級隔離 CI 與承包商通道,僅共享同一份維運手冊文字即可。