Вопрос или проблема
Я пытаюсь настроить подпись коммитов 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-отслеживаемые dotfiles, подмодули, и много символических ссылок. В любом случае, это начало работать где-то около этого коммита — надеюсь, это поможет
Ответ или решение
Подписание коммитов в Git с помощью SSH-ключей: ошибка с allowedSignersFile
С недавним обновлением Git (начиная с версии 2.34), появилась возможность подписывать коммиты с использованием SSH-ключей вместо традиционного GPG. Хотя на документации и форумах присутствует много информации о том, как правильно настроить этот процесс, пользователи часто сталкиваются с проблемами. В этой статье мы подробно рассмотрим проблему, связанную с ошибкой gpg.ssh.allowedSignersFile
, и предложим возможные решения.
Настройка Git для подписания коммитов
Чтобы настроить подписывание коммитов с использованием 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
Эти команды корректны, и ваша конфигурация на первый взгляд выглядит правильно. Однако во время попытки проверить подпись коммита вы получили ошибку:
error: gpg.ssh.allowedSignersFile needs to be configured and exist for ssh signature verification
Причины возникновения ошибки
Ошибка, с которой вы столкнулись, указывает на то, что Git не может найти файл, указанный в параметре gpg.ssh.allowedSignersFile
или, возможно, не имеет к нему доступа. Рассмотрим несколько возможных причин этой ошибки:
-
Ошибка в пути к файлу:
Убедитесь, что указанный путь к файлу корректен и файл действительно существует. Выполните следующую команду, чтобы проверить наличие файла:ls -l ~/.config/git/allowed_ssh_signers
-
Проблемы с правами доступа:
Убедитесь, что у вас есть права на чтение этого файла. Вы можете изменить права доступа к файлу с помощью команды:chmod 644 ~/.config/git/allowed_ssh_signers
-
Ошибки в содержимом файла:
Файлallowed_ssh_signers
должен содержать действительные записи, соответствующие подписи SSH. Убедитесь, что формат файла корректен и все строки правильно прописаны. -
Переменная окружения:
Проверьте, не влияет ли переменная окружения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, с подробным описанием вашей проблемы и всех предпринятых шагов.