Могу ли я подписывать коммиты git с помощью keybase.io?
Я настраиваю новую машину и предпочел бы использовать базу ключей для различных действий pgp, таких как подписание коммитов. Я могу запустить такую команду, как
$ keybase pgp sign -m foo > x
$ gpg --verify x 2>&1 | grep -oF 'Good signature'
Good signature
Я мог бы подписывать вещи напрямую с помощью gpg, но удобно позволить keybase управлять этим. Итак, могу ли я как-то заставить git использовать базу клавиш?
В конфигурации Git, похоже, нет способа настроить команду gpg, которую он использует для подписи коммитов. Все, что вы можете сделать, это предоставить ключ. Есть ли способ это сделать?
2 ответа
Благодаря ссылке в ответе Ксавьера я узнал, что могу переопределить программу gpg с конфигурацией gpg.program:
git config --global gpg.program /path/to/something
Таким образом, я могу использовать это, чтобы написать оболочку вокруг ключевой базы.
Но git, как оказалось, довольно привередлив в том, что это something
является. Git ожидает частичного синтаксического анализа вывода, полученного в результате--fd-status
флаг, который вызывает gpg
для вывода специальных кодов состояния на альтернативный дескриптор файла.
К счастью, по крайней мере, для моего первого прохода git не анализирует все, что производит gpg, поэтому я смог имитировать это. Вот суть функциональной оболочки, и вот ее суть:
# Copy the commit message from stdin to a file.
d=$(mktmp -d "${TMPDIR:-/tmp}/gitsig.XXXXXXXXX")
cat > "$d/commit.msg"
# Have Keybase write the signature to another file.
keybase pgp sign --detached \
--key "$1" \
--infile "$d/commit.msg" \
--outfile "$d/commit.sig"
# Have gpg verify the signature right away.
# Capture its status in a file.
gpg --verify --status-fd=2 \
"$d/commit.sig" "$d/commit.msg" \
> /dev/null 2> "$d/gpgstatus.txt"
# Copy the KEY_CONSIDERED lines to stderr. Git wants that.
grep '^\[GNUPG:\] KEY_CONSIDERED' "$d/gpgstatus.txt" >&2
# Produce a minimal SIG_CREATED line to stderr. Git also wants that.
printf '[GNUPG:] SIG_CREATED ' >&2
Здесь есть документ о том, как это сделать (с помощью github) https://github.com/pstadler/keybase-gpg-github