安全 2026年4月13日

2026 雲端 Mac SSH 強制命令與承包商:authorized_keys 模式如何在租用的 Apple Silicon 上通過稽核

MacLogin 安全團隊 2026年4月13日 約 13 分鐘閱讀

安全與平台團隊在租用 Apple Silicon Mac mini、並讓承包商與員工共用同一登入入口時,常繼承一份「人人一把公鑰、人人一個完整 shell」的 ~/.ssh/authorized_keys2026 年可執行的結論是:為每一把承包商金鑰單獨疊加 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 權限過大」

  1. 承包商金鑰出現在超過三個主機群組卻沒有輪替日期——典型的範圍蔓延。
  2. 鑑識顯示本應唯讀拉程式碼的帳號出現 ssh -R
  3. 滲透測試透過本機轉發存取內部管理 API,即便密碼登入已關閉。
  4. 合規問卷追問「命令白名單」,而你們的答案仍停留在「我們用 SSH 金鑰」。
警告: command="..." 的引號一旦寫錯,該金鑰會直接不可用。請以 sudo -e 編輯並納入版本控制,先用一次性測試金鑰驗證,再碰觸生產身分。

模式矩陣:包裝腳本與子系統

情境首選模式為何較易過審雲端 Mac 注意點
供應商唯讀 Git over SSHgit-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 生產環境的七步上線

  1. 盤點: 匯出目前金鑰與註解;缺少負責人、到期日與工單號的金鑰一律退回。
  2. 分類: 將金鑰標記為 人類互動機器唯讀應急;僅第一類保留完整 shell。
  3. 起草段落: 機器類金鑰前綴寫成 restrict,command="/usr/local/bin/ci-git-bridge.sh" 風格——路徑依包裝腳本實際位置調整。
  4. 語法自檢: 在允許的環境執行 sshd -T,並以拋棄式使用者驗證 sshd 仍能啟動。
  5. 負向測試: 從承包商筆電嘗試 ssh -o RequestTTY=yes、白名單外的 scp、以及 -R 轉發——必須失敗閉合。
  6. 金絲雀視窗: 先在單一 MacLogin 區域(例如東京)觀察 72 小時,再推廣到香港與新加坡副本。
  7. 證據包: 附上 diff、測試終端機輸出摘錄,以及統一日誌裡「僅出現預期命令」的證明。

git-shell 與自訂包裝:如何快速決策

當合法活動只有 Git 協定流量時,git-shell 能節省工程時間,因為它已理解 git-upload-pack 等呼叫形態。一旦需要呼叫 /usr/bin/defaults、與 Xcode API 互動、或在多儲存庫間依 ACL 分發,請改用簽章包裝腳本,記錄 argv、來源 IP 與租約主機名。

包裝腳本的日誌建議

向權限為 0600 的檔案寫入結構化 JSON 行,或透過 logger 送入統一日誌;欄位包含 MacLogin 區域碼(HKJPKRSGUS),便於下游 SIEM 路由。

稽核欄位清單:審核方真正會要的證據

證據類型最短保留負責人備註
authorized_keys 版本 diff365 天平台團隊關聯變更工單 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 與承包商通道,僅共享同一份維運手冊文字即可。

開獨立租約驗證承包商金鑰

在類生產區域先驗證強制命令,再碰觸共享 authorized_keys。