核准
每一個用到密碼的請求都會等你,你核准的是這一次使用,而不是整個代理。視窗先寫最重要的,再列出所有決定值會去哪裡的內容:
run_with_secrets | http_request |
|---|---|
use pg-staging → /opt/homebrew/bin/psql | send github → https://api.github.com |
| 參數、stdin 內容、環境變數、暫存檔內容、工作目錄 | 方法與網址、每個標頭、內容的開頭 |
佔位符以 {{secret:NAME}} 顯示——密碼值本身永遠不會出現在視窗裡。換行、終端機控制碼、雙向文字控制字元與零寬字元 都會以跳脫形式顯示,文字無法偽裝。太長而無法完整顯示的請求(超過 700 字)會在跳出視窗之前就被拒絕,而不是截斷後顯示。
強驗證與弱驗證
| 強驗證——驗證你的身分 | 弱驗證——只確認意圖 | |
|---|---|---|
| macOS | Touch ID 或登入密碼 | 從終端機核准 |
| Windows | Windows Hello(PIN、指紋、臉部) | 是/否訊息框、終端機 |
| Linux | polkit,要求輸入你的密碼(細節會在它之前以通知顯示) | zenity/kdialog 詢問、終端機 |
預設的 method = "auto" 一律先試強驗證。只有在強驗證無法使用時——透過 SSH 沒有圖形介面、 Windows Hello 沒設定、polkit 動作沒安裝——而且 allow_weak = true,才會退回弱驗證。
取消就是拒絕
在驗證視窗按取消,請求就被拒絕。你說不之後,keymitt 絕不會改用較弱的方式再問一次,也會告訴代理不要重複同一個請求。
要完全禁止弱驗證,設定 allow_weak = false 或 method = "native"。
耗時
每次決定都會在稽核紀錄裡記下花了多久(elapsed_ms)。人讀完視窗再完成驗證至少要一秒多; 如果某個會跳視窗的方式只花了幾毫秒就核准,就值得回頭查。
記住核准
ttl_secs 會把核准記住一段時間——但只對位元組完全相同的請求有效:相同的指令、stdin 模板、環境變數、 暫存檔與工作目錄,或相同的方法、網址、標頭與內容。不同的請求一定會再問。預設 0 表示每次都問。
沒有畫面的機器
在沒有圖形介面的伺服器上,改用終端機核准:
[approval]
method = "cli"代理送出請求時,keymitt 會把它記成等待中並暫停。從另一個終端機列出等待中的請求:
keymitt pending再核准其中一個——keymitt 會顯示請求內容,請你輸入 yes——或拒絕它:
keymitt approve 3f9c2a1b
keymitt deny 3f9c2a1bapprove 與 deny 必須在互動式終端機執行。終端機核准仍然是弱驗證:任何以你身分執行的程序都能寫入決定檔。 能用強驗證的地方,請優先用強驗證。
一定要強驗證的操作
keymitt backup 會匯出所有密碼值,keymitt restore 可能改動你的政策,所以不論設定如何,兩者都不接受弱驗證。 請看備份與還原。