本文へスキップ
ecdsa.com
Git (verify-commit, log --show-signature, merge --verify-signatures) with gpg.format=sshGit

エラーメッセージ

error: gpg.ssh.allowedSignersFile needs to be configured and exist for ssh signature verification

別の表記

  • fatal: either user.signingkey or gpg.ssh.defaultKeyCommand needs to be configured

`git log --show-signature` は同じ行を出力した後、そのコミットについて「No signature」と表示します。コミットが未署名のように見えますが、実際には署名されています。

このエラーの意味

コミットには SSH 署名(`gpg.format ssh`)が付いており、Git はこれを `ssh-keygen -Y verify` で検証します。その際、ID(メールアドレス)と信頼する公開鍵を対応付ける「allowed signers」ファイルと照合します。このファイルが設定されていないため、Git は署名が信頼できる相手のものかどうかを判断できず、判定結果の代わりにエラーを報告します。署名そのものは完全に有効な場合もあります。署名する側では、「either user.signingkey or gpg.ssh.defaultKeyCommand needs to be configured」が同様の設定漏れを示します。

発生する理由

修正方法

  1. 1.

    allowed signers ファイルを作成する

    各行には、プリンシパル(複数可)、`namespaces="git"` などの任意のオプション、公開鍵の順に記述します。Git はコミッターのメールアドレスをプリンシパルと照合します。

    bash
    # One line per trusted signer: principal (email) + public key; namespaces restricts it to git
    echo "alice@example.com namespaces=\"git\" $(cut -d' ' -f1,2 ~/.ssh/id_ed25519.pub)" >> ~/.config/git/allowed_signers
    git config --global gpg.ssh.allowedSignersFile ~/.config/git/allowed_signers
    git verify-commit HEAD
  2. 2.

    チームの署名者をリポジトリで管理する

    レビュー済みのファイルをリポジトリに置くと、全員(と CI)が同じ鍵セットで検証できます。ファイルの変更はコードレビューを経て行われます。

    bash
    # Team setup: a reviewed allowed_signers file in the repository
    git config gpg.ssh.allowedSignersFile .github/allowed_signers
    git log --show-signature -1

関連するエラー

署名エラーデータベースをすべて見る