Сообщение об ошибке
gpg: Can't check signature: No public key
Также выводится как
- gpg: Can't check signature: no public key
GnuPG 2.4 выводит «No public key»; в переводах и старых сборках может отличаться регистр букв. Команды проверки Git завершаются с ненулевым кодом и передают вывод gpg дальше.
Что это означает
Объект подписан, и gpg нашёл подпись, но в связке ключей нет открытого ключа с отпечатком издателя, поэтому gpg не может сказать, верна подпись или нет. Какой ключ нужен, показывают предыдущие строки («Signature made …», «using … key <fingerprint>»). Дело не в неверной подписи — не хватает ключа.
Почему это происходит
Ключ подписанта так и не импортировали
частоНовая машина, CI-раннер, отдельный `GNUPGHOME` или коллега, чей ключ вы так и не получили.
Ключи не загружаются автоматически
иногдаGnuPG не загружает ключи автоматически, если не настроены `auto-key-retrieve` и сервер ключей; многие серверы ключей больше не отдают идентификаторы пользователей без проверки.
Подключ для подписи новее вашей копии ключа
иногдаЕсли подписант добавил новый подключ для подписи, в старой копии его открытого ключа этого подключа нет. Обновите ключ из его источника.
Как исправить
- 1.
Импортируйте ключ из доверенного источника
Импортируйте ключ с сайта проекта, из примечаний к релизу или с сервера ключей и, прежде чем доверять подписям, проверьте отпечаток по отдельному каналу.
bash # Import the signer's key from a trusted source, then compare the fingerprint out of band curl -sSL https://example.com/release-signing-key.asc | gpg --import gpg --fingerprint release@example.com git verify-commit HEAD - 2.
Используйте ключи, которые публикует платформа
GitHub отдаёт зарегистрированные GPG-ключи каждого пользователя по адресу `https://github.com/<user>.gpg`.
bash # Keys a GitHub user registered for signing (verify the fingerprint before trusting it) curl -sSL https://github.com/<user>.gpg | gpg --import
Связанные ошибки
gpg: BAD signature from "Release Bot <release@example.com>" [ultimate]GnuPG (gpg --verify, git verify-commit / verify-tag)error: gpg failed to sign the dataGit (commit -S, tag -s, commit.gpgsign) with GnuPGerror: gpg.ssh.allowedSignersFile needs to be configured and exist for ssh sign…Git (verify-commit, log --show-signature, merge --verify-signatures) with gpg.format=ssh