Featured image of post 使用 SSH 金鑰代替 GPG 金鑰進行 Git 提交簽名Featured image of post 使用 SSH 金鑰代替 GPG 金鑰進行 Git 提交簽名

使用 SSH 金鑰代替 GPG 金鑰進行 Git 提交簽名

直接設定 SSH 金鑰以輕鬆簽署和驗證儲存庫主機上的 git 提交。

長期以來,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.pubid_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 簽章是保護專案提交歷史記錄的高效方法。

  1. **設定 gpg.format ssh 以使用您現有的憑證。 **
  2. **在 GitHub 上將金鑰註冊為「簽署金鑰」以顯示綠色驗證徽章。 **
  3. **使用 allowedSignersFile 設定在團隊內建立本機信任圈。 **

立即採用 SSH 簽名,以最小的配置開銷升級儲存庫的安全狀態。