Перейти к содержимому
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` по файлу разрешённых подписантов (allowed signers), который сопоставляет идентификаторы (адреса электронной почты) с доверенными открытыми ключами. Такой файл не настроен, поэтому Git не может решить, принадлежит ли подпись тому, кому вы доверяете, и вместо вердикта сообщает об ошибке. Сама подпись при этом может быть полностью верной. На стороне подписи аналогичный пробел в конфигурации даёт сообщение «either user.signingkey or gpg.ssh.defaultKeyCommand needs to be configured».

Почему это происходит

Как исправить

  1. 1.

    Создайте файл разрешённых подписантов

    Каждая строка: один или несколько принципалов (principals), необязательные параметры вроде `namespaces="git"`, затем открытый ключ. Git сверяет email коммиттера с принципалом.

    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

Связанные ошибки

Открыть всю базу ошибок подписей