長期以來,GPG(GNU Privacy Guard)金鑰是簽署 Git 提交以證明身份並防止篡改的行業標準。然而,設定 GPG 涉及產生密鑰環、管理過期日期和調試後台代理,這給開發人員帶來了很大的麻煩。
為了消除這種複雜性,Git 2.34 版本引入了使用現有 SSH 金鑰直接簽署提交的功能,從而繞過了 GPG 金鑰的需要。
在本指南中,我們將探索如何設定 Git 以使用 SSH 金鑰來簽署提交、在本機驗證金鑰以及啟用跨開發團隊的信任關係。
1. 為什麼從 GPG 切換到 SSH 金鑰?
- 無金鑰冗餘:您可以重複使用已用於透過 GitHub 進行驗證的相同 SSH 金鑰(例如
id_ed25519),讓您無需產生和維護單獨的 GPG 金鑰對。 - 更簡單的設定:只需要幾個終端命令即可運作。
- 更乾淨的備份:標準 SSH 金鑰重量輕,易於遷移,並且受到現代終端 shell 的原生支援。
2. 設定 Git 使用 SSH 金鑰簽名
第 1 步:將加密格式設定為 SSH
告訴 Git 使用 SSH 而不是 GPG 進行提交簽名:
git config --global gpg.format ssh
第 2 步:關聯您的 SSH 公鑰
將 Git 指向您的 SSH 公鑰檔案(通常位於 ~/.ssh 目錄中的 id_ed25519.pub 或 id_rsa.pub):
git config --global user.signingkey ~/.ssh/id_ed25519.pub
第 3 步:啟用全域簽名
確保 Git 自動簽署每個提交:
git config --global commit.gpgsign true
3.本地驗證同事的SSH簽名
雖然 GitHub 在您將公鑰註冊為「簽署金鑰」後會自動驗證您的 SSH 簽章提交,但透過 git log --show-signature 在終端本地驗證簽章需要設定 allowed_signers 檔案。
第 1 步:建立允許的簽署者文件
建立全域設定檔以將電子郵件地址對應到受信任的公鑰:
touch ~/.config/git/allowed_signers
第 2 步:填充文件
按以下格式新增團隊成員的電子郵件和公鑰:
# <email> namespaces="git" <SSH public key>
[email protected] namespaces="git" ssh-ed25519 AAAAC3NzaC1...
[email protected] namespaces="git" ssh-ed25519 AAAAC3NzaC1...
第 3 步:將檔案連結到 Git 配置
git config --global gpg.ssh.allowedSignersFile ~/.config/git/allowed_signers
現在,在本機上執行 git log --show-signature 將交叉引用此檔案並將來自 Alice 或 Bob 的簽章報告為可信。
結論
利用 SSH 金鑰進行 Git 簽章是保護專案提交歷史記錄的高效方法。
- **設定
gpg.format ssh以使用您現有的憑證。 ** - **在 GitHub 上將金鑰註冊為「簽署金鑰」以顯示綠色驗證徽章。 **
- **使用
allowedSignersFile設定在團隊內建立本機信任圈。 **
立即採用 SSH 簽名,以最小的配置開銷升級儲存庫的安全狀態。

