969 字
5 分鐘

Claude Code 不再詢問存了密碼?檢查 settings.local.json 與 Git 歷史

本文目錄

在 Claude Code 核准一條含明文密碼的 Bash 命令後,先查 .claude/settings.local.json 的 permissions.allow。如果保存的規則包含密碼,這份設定檔就需要當成含憑證的檔案處理。已推送、分享或無法排除外流時,先撤銷或輪替憑證,再處理 Git 的副本。

先在本機核對核准規則#

Anthropic 文件說明,Bash 核准選擇「Yes, and don’t ask again」會把核准寫入本機設定。符合文件條件的 Git 專案會寫在儲存庫根目錄,worktree 則會使用主要 checkout 根目錄的檔案。v2.1.211 以前會寫在工作階段的起始目錄。Windows、家目錄本身就是儲存庫等例外也可能影響位置。先看目前版本及 /permissions 顯示的來源,再在本機編輯器檢查對應檔案,避免把規則全文貼進聊天、工單或 CI 日誌。 Claude Code 設定文件

看到 Bash(...) 時,核對 URL、命令參數及環境變數賦值中是否有明文。即使終端機後來改用環境變數,先前存下的核准規則仍須另外移除。需要反覆執行的命令,可以改為審查過的專案腳本,由執行環境供應憑證,再核准固定的腳本入口。腳本內容及它依賴的設定也要受版本控制與審查,因為修改腳本仍會改變核准後執行的行為。 Claude Code 權限規則

分開查 Git 的忽略、追蹤與歷史#

在有問題的儲存庫執行以下檢查。範例採用根目錄路徑,舊版或例外環境請代入找到的實際相對路徑。三條指令都只列路徑或提交資訊。

Terminal window
git check-ignore -v --no-index -- .claude/settings.local.json
git ls-files -- .claude/settings.local.json
git log --all --format='%h %as' -- .claude/settings.local.json
  • check-ignore 列出規則來源,可能是使用者全域 ignore,也可能是專案的 .gitignore。--no-index 可查出對已追蹤檔案原本會匹配的規則。
  • ls-files 有列出路徑,表示檔案仍在索引中,ignore 規則只影響尚未追蹤的檔案。Anthropic 文件說明,Claude Code 第一次寫入且專案尚未忽略時,會加入全域 excludes。若希望團隊所有 clone 都有同一條規則,可將 **/.claude/settings.local.json 加到專案的 .gitignore。
  • log 找到提交時,即使這個分支的最新版本已移除檔案,舊提交仍須評估。--all 涵蓋本機已知 refs,仍需檢查曾改名的路徑、遠端分支及已分享的 PR、fork 或 clone。

確認檔案要從專案停止追蹤、且沒有需要保留的暫存版本後,執行 git rm --cached -- .claude/settings.local.json,再檢查 git diff --cached --name-status -- .claude/settings.local.json 應顯示 D。這會把移除列入下一次提交,工作目錄的檔案仍在,應一併刪除其中含明文的核准規則。測試儲存庫中的假資料可用來確認這兩個狀態,無須拿真實憑證驗證。 Git check-ignore · Git rm

如果憑證可能已外流,輪替後從使用新憑證的應用程式確認正常,再確認舊憑證已失效。是否清理歷史,依殘留資料的敏感度及團隊能否協調處理各個副本決定。刪除最新檔案無法移除 fork、clone 或 PR 中可能仍可讀取的內容。 GitHub 敏感資料清理指南

如果還要檢查自動化的核准範圍,可以搭配 Claude Code 權限驗收清單。對會接觸敏感檔案的工具呼叫,另見 PreToolUse 的敏感檔案防護。

參考資料:

Claude Code 設定檔位置與優先順序

Claude Code 權限規則

Git check-ignore

Git rm

GitHub 敏感資料清理指南

Claude Code 不再詢問存了密碼?檢查 settings.local.json 與 Git 歷史
https://laplusda.com/posts/claude-code-settings-local-json-secret-cleanup/
作者
Zero
發佈於
2026-11-08
許可協議
CC BY-NC-SA 4.0