При использовании gpg-agent с git tag -u я сразу получаю следующую ошибку:
gpg: cancelled by user
gpg: skipped "my@email.com": bad passphrase
gpg: signing failed: bad passphrase
error: gpg failed to sign the data
error: unable to sign the tag
GPG-agent.conf:
pinentry-program /usr/bin/pinentry-curses
Когда я сначала разблокирую ключ (с помощью gpg -e -s test.txt
), то команда git tag -u
поднимает ключ и подписывает тег, как и ожидалось.
Это на Ubuntu 13.10, используя i3 wm. Я подозреваю, что gnome-keyring каким-то образом мешает ... что-то, но на Raspberry Pi, работающем с archlinux-arm, он работает точно так же, но с немного другой проблемой - После запуска команды git tag -u
, он запрашивает пароль для разблокировки, но не отображается пинентри или приглашение. Через некоторое время (около 30 секунд) происходит сбой со следующим:
gpg: problem with the agent: Line passed to IPC too long
gpg: skipped "my@email.com": Operation cancelled
gpg: signing failed: Operation cancelled
error: gpg failed to sign the data
error: unable to sign the tag
Опять же, как только я разблокирую ключ с прямым gpg -s
в произвольный файл для кэширования учетных данных в gpg-agent, тег подписывается без проблем.
Я предполагаю, что что-то странное с использованием моих проклятий. Я уже обновил /usr /bin /pinentry, чтобы он указывал на /usr /bin /pinentry-curses, но проблема сохраняется.
Что я делаю не так, и как мне заставить git хорошо играть с gpg/pinentry?
- Ubuntu GPG версия: 1.4.14
- archlinux-arm версия gpg: gnupg-2.0.22-1
РЕДАКТИРОВАТЬ: работает Zsh. Вот соответствующий бит, полученный для агента gpg:
if [ $EUID -ne 0 ] ; then
envfile="$HOME/.gnupg/gpg-agent.env"
if [[ -e "$envfile" ]] && kill -0 $(grep GPG_AGENT_INFO "$envfile" | cut -d: -f 2) 2>/dev/null; then
eval "$(cat "$envfile")"
else
eval "$(gpg-agent --daemon --write-env-file "$envfile")"
fi
export GPG_AGENT_INFO # the env file does not contain the export statement
fi
когда я следую $(tty) (например: /dev/pts/16
), владение уже является user:tty
.