Сообщение об ошибке
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».
Почему это происходит
Подпись по SSH настроена, а проверка — нет
частоРуководства по подписи коммитов SSH-ключом обычно заканчиваются на `gpg.format ssh` и `user.signingkey`. Подпись работает, но для проверки нужен ещё и `gpg.ssh.allowedSignersFile`.
Указанного файла не существует
иногдаПуть из репозитория dotfiles, по которому на этой машине ничего нет, или нераскрытый `~` там, где записана конфигурация.
Проверка в CI без файла разрешённых подписантов
иногдаСкриптам защиты веток или выпуска релизов, которые запускают `git verify-commit`, файл разрешённых подписантов нужен в самом задании, а не только на машинах разработчиков.
Как исправить
- 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.
Храните подписантов команды в репозитории
Файл в репозитории, прошедший ревью, позволяет всем (и 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