SSH/HTTPS/鑰匙圈對照
共用家目錄易混身分(401/403)。下表選型;週期見 SSH 輪替。
| 維度 | SSH(憑證/金鑰) | HTTPS + PAT + helper | 鑰匙圈/檔案後端(macOS) |
|---|---|---|---|
| 身分綁定 | IdentityFile+短效 CA 憑證,易稽核。 |
PAT/OAuth,須對齊 SSO。 | osxkeychain;多帳戶要分區或 useHttpPath。 |
| 共享機建議 | 專用 Unix 使用者;限 Principal;勿混 ssh-add。 |
一機器人一作用域;輪替視窗單獨驗收。 | 或 store 分檔 0440,避免無鎖同寫。 |
| 典型坑 | 過期憑證快取;ProxyJump 串錯。 | PAT 權限過大;未灰度輪替。 | 同 host 多倉一鍵覆寫 → 開 useHttpPath。 |
併發拉取與迴避
併行度受鎖與磁碟約束;細節見 worktree 矩陣。
| 情境 | 風險 | 迴避策略 |
|---|---|---|
併行 fetch |
pack/refs 爭用、鎖衝突。 | 分目錄;裸庫串行 fetch;大倉淺複製。 |
併行 clone |
同寫 helper。 | 預置 token 或串行 credential fill。 |
| 輪替當夜 | 新舊權杖交錯。 | 雙寫視窗+探針通過再撤舊 PAT。 |
可執行設定片段
假設使用者 ci;密鑰分檔見 節點密鑰最小權限。
HTTPS
[credential]
helper = osxkeychain
useHttpPath = true
[credential "https://github.com/org/"]
username = ci-bot
[http]
postBuffer = 524288000
SSH
Host github.com
HostName github.com
User git
IdentityFile ~/.ssh/id_ed25519_ci
CertificateFile ~/.ssh/id_ed25519_ci-cert.pub
IdentitiesOnly yes
非互動:GIT_TERMINAL_PROMPT=0、BatchMode yes。
驗證步驟
- 身分:
ssh -T git@github.com與git ls-remote與預期一致。 - 鑰匙圈:輪替後
printf "host=github.com\nprotocol=https\npath=org/repo\n\n" | git credential-osxkeychain erase,再GIT_TERMINAL_PROMPT=0 git ls-remote origin。 - 併發/權限:裸庫雙 fetch 無損;多倉抽樣無 401;PAT/
Principal最小化。
最小權限驗收
- □ 自動化身分獨立使用者或 HOME;鑰匙圈分區。
- □ HTTPS:
useHttpPath或等效路徑分流。 - □ 輪替視窗+告警;
GIT_TERMINAL_PROMPT=0;撤舊權杖後探針仍綠(參 節點密鑰)。
FAQ
FAQPage JSON-LD 有全文。摘要:useHttpPath;401 查 PAT/併發寫;混用須 url.insteadOf。