Подпись коммитов Git с помощью SSH-ключей — упорная ошибка о файле allowedSignersFile

Вопрос или проблема

Я пытаюсь настроить подпись коммитов git с помощью SSH-ключей (вместо PGP/GPG). Это относительно новая функция, добавленная в git 2.34.

Я следовал всем шагам (хорошо документированным в man git-config в разделе gpg.ssh, а также на блогах):

  • git config gpg.format ssh
  • git config gpg.ssh.allowedSignersFile ~/.config/git/allowed_ssh_signers
  • git config user.signingKey ~/.ssh/git-key.ed25519
  • git config commit.sign true

После этого подпись действительно происходит — я вижу поле gpgsig -----BEGIN SSH SIGNATURE----- в git show --pretty=raw <commit>. Но проверка, похоже, не работает:

$ git show --show-signature HEAD
error: gpg.ssh.allowedSignersFile нужно настроить и он должен существовать для проверки подписи SSH
commit 5957261166c2bfc8e2ef77094c74f95bcb50577b (HEAD -> main)
Нет подписи
Автор: max ulidtko <[email protected]>
Дата:   Пт, 17 июн 2022 17:05:47 +0300

    тестовая подпись коммита ssh 6
$
$ git show --pretty=raw HEAD
commit 5957261166c2bfc8e2ef77094c74f95bcb50577b
tree 4b825dc642cb6eb9a060e54bf8d69288fbee4904
author max ulidtko <[email protected]> 1655474747 +0300
committer max ulidtko <[email protected]> 1655474747 +0300
gpgsig -----BEGIN SSH SIGNATURE-----
 U1NIU0lHAAAAAQAAADMAAAALc3NoLWVkMjU1MTkAAAAgLzSyuIgqnSPQxnUlPhcdiKg/36
 INE7hSMLVQJLWMuo4AAAADZ2l0AAAAAAAAAAZzaGE1MTIAAABTAAAAC3NzaC1lZDI1NTE5
 AAAAQLnpQYbrfYYJe0rTIEW8hruTRmn4kcKhwhurrA9bKMnXd5b7W0wvl7auYS8LlBBXy7
 SqpIjZunnUE/EI2Q4Xiw8=
 -----END SSH SIGNATURE-----

    тестовая подпись коммита ssh 6
$
$ cat $(git config gpg.ssh.allowersignersfile)
───────┬────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────
       │ Файл: /home/ulidtko/.config/git/allowed_ssh_signers
       │ Размер: 99 B
───────┼────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────
   1   │ [email protected] ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIC80sriIKp0j0MZ1JT4XHYioP9+iDRO4UjC1UCS1jLqO
───────┴────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────
$
$ git --version
git version 2.36.1

Как видно, файл, о котором идет речь, существует и имеет ожидаемый формат. (У меня cat ассоциирован с bat)

В чем проблема? Это известный баг?

Для справки, с 3-й или 4-й попытки мне удалось заставить это работать. На 2-х машинах:

ОС git –version ssh -V
Ubuntu 22.04.3 LTS jammy 2.34.1 OpenSSH_8.9p1 Ubuntu-3ubuntu0.4, OpenSSL 3.0.2 15 мар 2022
Arch Linux, последний полный апдейт 2022-11-21 2.38.1 OpenSSH_9.1p1, OpenSSL 3.0.7 1 ноя 2022

Журнал коммитов с графиком с --show-signature теперь выглядит так, как и ожидалось (две машины подписывают разными ключами):

график журнала git с подписями

К сожалению, я не понял, что именно я делал не так в предыдущих попытках. Просто сейчас это работает ¯\_(ツ)_/¯

Настройка не тривиальна для минимизации: я использую git-отслеживаемые dotfiles, подмодули, и много символических ссылок. В любом случае, это начало работать где-то около этого коммита — надеюсь, это поможет

Ответ или решение

Подписание коммитов в Git с помощью SSH-ключей: ошибка с allowedSignersFile

С недавним обновлением Git (начиная с версии 2.34), появилась возможность подписывать коммиты с использованием SSH-ключей вместо традиционного GPG. Хотя на документации и форумах присутствует много информации о том, как правильно настроить этот процесс, пользователи часто сталкиваются с проблемами. В этой статье мы подробно рассмотрим проблему, связанную с ошибкой gpg.ssh.allowedSignersFile, и предложим возможные решения.

Настройка Git для подписания коммитов

Чтобы настроить подписывание коммитов с использованием SSH, вы выполнили следующие команды:

  1. git config gpg.format ssh
  2. git config gpg.ssh.allowedSignersFile ~/.config/git/allowed_ssh_signers
  3. git config user.signingKey ~/.ssh/git-key.ed25519
  4. git config commit.sign true

Эти команды корректны, и ваша конфигурация на первый взгляд выглядит правильно. Однако во время попытки проверить подпись коммита вы получили ошибку:

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

Причины возникновения ошибки

Ошибка, с которой вы столкнулись, указывает на то, что Git не может найти файл, указанный в параметре gpg.ssh.allowedSignersFile или, возможно, не имеет к нему доступа. Рассмотрим несколько возможных причин этой ошибки:

  1. Ошибка в пути к файлу:
    Убедитесь, что указанный путь к файлу корректен и файл действительно существует. Выполните следующую команду, чтобы проверить наличие файла:

    ls -l ~/.config/git/allowed_ssh_signers
  2. Проблемы с правами доступа:
    Убедитесь, что у вас есть права на чтение этого файла. Вы можете изменить права доступа к файлу с помощью команды:

    chmod 644 ~/.config/git/allowed_ssh_signers
  3. Ошибки в содержимом файла:
    Файл allowed_ssh_signers должен содержать действительные записи, соответствующие подписи SSH. Убедитесь, что формат файла корректен и все строки правильно прописаны.

  4. Переменная окружения:
    Проверьте, не влияет ли переменная окружения GIT_SSH_COMMAND на поведение Git при работе с SSH, если она установлена.

Проверка конфигурации

Вы ранее упомянули, что вывод команды cat $(git config gpg.ssh.allowedSignersFile) успешно отображает содержимое файла. Это хорошо, так как означает, что путь к файлу настроен корректно.

Тем не менее, если вы по-прежнему получаете ошибку, после внесения исправлений, попробуйте удалить и заново настроить параметры. Например, вы можете удалить и снова добавить путь к allowedSignersFile:

git config --unset gpg.ssh.allowedSignersFile
git config gpg.ssh.allowedSignersFile ~/.config/git/allowed_ssh_signers

Убедитесь, что используется актуальная версия Git

Поскольку перечисленные вами версии Git на разных системах имеют различия, обновление до последней стабильной версии может помочь устранить баги, которые присутствуют в предыдущих версиях. Вы используете git version 2.36.1, и иногда обновление решает множество непонятных проблем.

Заключение

Надеюсь, эта информация поможет вам решить ваши проблемы с подписанием коммитов в Git. Важно помнить, что конфигурация может быть сложной в зависимости от окружения и инструментов, которые вы используете. Также не забывайте тщательно проверять все шаги настройки.

Если вы все еще сталкиваетесь с проблемами, рассмотрите возможность создания нового вопроса на специализированных ресурсах, таких как Stack Overflow, с подробным описанием вашей проблемы и всех предпринятых шагов.

Оцените материал
Добавить комментарий

Капча загружается...