Могу ли я подписать коммиты git с keybase.io? - PullRequest
4 голосов
/ 18 октября 2019

Я настраиваю новую машину и предпочел бы использовать базу ключей для различных действий pgp, таких как подписание коммитов. Я могу выполнить команду типа

$ keybase pgp sign -m foo > x
$ gpg --verify x 2>&1 | grep -oF 'Good signature'
Good signature

. Я мог бы подписывать вещи напрямую с помощью gpg, но удобно, чтобы база данных управляла этим. Так можно ли как-нибудь заставить git использовать базу ключей?

Конфигурация Git , похоже, не имеет способа настроить команду gpg, которую она использует для подписания коммитов. Все, что вы можете сделать, это предоставить ключ. Есть ли способ сделать это?

Ответы [ 2 ]

2 голосов
/ 19 октября 2019

Благодаря ссылке в Ответ Ксавье Я узнал, что могу переопределить программу gpg с помощью конфигурации gpg.program:

git config --global gpg.program /path/to/something

Так что я могу использовать это для написания оболочкивокруг keybase.

Но 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
1 голос
/ 18 октября 2019

Здесь есть документ о том, как это сделать (с github) https://github.com/pstadler/keybase-gpg-github

...