gpg-agent-info и seahorse-agent протухли, поэтому в 2.2.26-alt1 были удалены gnupg-agent.sh и gnupg-agent-wrapper. С gnupg-agent-wrapper все понятно, но у gnupg-agent.sh была еще одна полезная функция, которая, к сожалению, была утеряна с его удалением - установка GPG_TTY. gpg-agent(1): ... You should always add the following lines to your .bashrc or whatever initialization file is used for all shell invocations: GPG_TTY=$(tty) export GPG_TTY ... Поскольку я часто подписываю пакеты на удаленной машине, хотел бы вернуть автоустановку GPG_TTY Для этого подготовил патч в /people/viy/packages/gnupg2.git commit db6f87051fe790714cac6806ebda96a9313f6306 (HEAD -> sisyphus, tag: 2.2.32-> Author: Igor Vlasenko <viy@altlinux.org> Date: Mon Dec 6 12:02:27 2021 +0200 set GPG_TTY in profile.d for gpg-agent также доступно как task #291478 FAILED #1 [test-only] sisyphus gnupg2.git=2.2.32-alt1.gnupg-agent собралось (build Ok), но FAILED sisyphus-check, так как я не менял Release, просто патч к текущему)
+if [ -z "${GPG_TTY-}" -a -d "$GNUPGHOME" ]; then + GPG_TTY="$(tty)"; export GPG_TTY +fi И после этого gpg-agent будет выводить диалог на этом tty даже если запрос придёт с другого tty. На мой взгляд гораздо правильнее использовать pinentry, который при запуске бы вычислил активный tty.
а в консоли на удаленной машине будет работать? а то я только что обновился на p10, все выглядит сломанным и непривычным, старые скрипты и привычки с gpg надо закапывать и переходить на gpg2, пытаюсь разобраться, что теперь.
(Ответ для viy на комментарий #2) > а в консоли на удаленной машине будет работать? Честно сказать не пробовал. > а то я только что обновился на p10, все выглядит сломанным и непривычным, > старые скрипты и привычки с gpg надо закапывать и переходить на gpg2, > пытаюсь разобраться, что теперь. Давай попробуем придумать способ.
(Ответ для Alexey Gladkov на комментарий #3) > > а в консоли на удаленной машине будет работать? > Честно сказать не пробовал. > Давай попробуем придумать способ. Попробовал, действительно не работает. Итак, я захожу на удаленную машину. Работаю под tmux. Есть нюанс, удаленная машина под p9 и там все работает, подписывается, и т.д. там gnupg2-2.2.19-alt2.x86_64 но думаю, это не принципиально. Моделирую указанную ситуацию. 1) Сделал git config --global gpg.program gpg2 теперь git config --global gpg.program gpg2 чтобы исключить gnupg v1. 2)gpgconf --kill gpg-agent проверил, что в ps -fu больше нет gpg-agent убил выставленные старым кривым скриптом переменные export GPG_AGENT_INFO= export GPG_TTY= 3) git tag -s -m 0.027-alt1 0.027-alt1 error: gpg failed to sign the data error: unable to sign the tag поймал проблему. если же делаю export GPG_TTY=`tty` git tag -s -m 0.027-alt1 0.027-alt1 то тут же вылезает ncurses pinentry и все подписывается.
Это воспроизвелось и на p10 c gnupg2-2.2.29-alt1.x86_64 Как воспроизвести: 1) git config --global gpg.program gpg2 иначе git вызовет не gpg2, а gpg из gnupg-1.4.23-alt4.x86_64, а gpg умеет в таком случае просто спросить в консоли. 2) CTRL+ALT+3, залогиниться в текстовую консоль. 3) unset GPG_TTY на всякий, если оно было выставлено ранее 4) git tag -s -m test test1 error: gpg failed to sign the data error: unable to sign the tag если же делаю export GPG_TTY=`tty` то работает.
вместо git config --global gpg.program gpg2 можно указывать в опции git: git tag -c gpg.program=gpg2 -s -m test test1
Правильно ли я понимаю, что gpg-agent запускается на удалённой машине так же как и сам gpg2 ?
(Ответ для Alexey Gladkov на комментарий #7) > Правильно ли я понимаю, что gpg-agent запускается на удалённой машине так же > как и сам gpg2 ? В комментарии 4 https://bugzilla.altlinux.org/show_bug.cgi?id=41509#c4 там да, там я привел пример с работой на удаленной машине. В комментариях 5-6 я привел пример на локальной машине, на которой сейчас работаю.
(Ответ для viy на комментарий #8) > > В комментарии 4 > https://bugzilla.altlinux.org/show_bug.cgi?id=41509#c4 > там да, там я привел пример с работой на удаленной машине. и там да, gpg-agent запускается на удалённой машине так же как и сам gpg2. > В комментариях 5-6 я привел пример на локальной машине, на которой сейчас > работаю. В них, естественно, gpg-agent и gpg2 работают на локальной машине.
А запуск агента на удалённой машине это принципиальное решение ? Не пробовал прокидывать сокет агента на удалённую машину прокидывать ? https://wiki.gnupg.org/AgentForwarding Спрашиваю потому что на локальной машине можно использовать не только ncurses и tty.
(Ответ для Alexey Gladkov на комментарий #10) > Спрашиваю потому что на локальной машине можно использовать не только > ncurses и tty. Мне это нужно не только для себя, но и для работы girar-tools. Я сидел на p9, и тут мне внезапно начали поступать сообщения, что в сизифе girar-tools сломаны и не запускают агента как раньше, автоматически. Задним числом понятно, что это вышел 2.2.26-alt1. Т.е таких как я не один, и для этого неустановленного числа лиц надо бы добавить поддержку консоли. По поводу прокидывать сокет агента на удалённую машину тема хорошая, я и сам попробую, и потестирую girar-tools. Но она не отменяет проблемы с консолью в gpg2. К примеру, вряд ли буду прокидывать сокет агента на удалённую машину везде, кроме разве своих домашних машин. Ведь у меня много контейнеров с роботами, в которых свои имена пользователя и свои независимые ключи, и их работу надо подписывать их ключами, не моим. В принципе, я в основном пользуюсь girar-tools, и могу их захакать, добавив export GPG_TTY внутрь соответствующих утилит. Это будет работающее для меня решение, но странное.
Если вы запускаешь агента там, то даже если экспортировать GPG_TTY как у тебя работает ssh, logout, ssh обратно на эту же машину ? Агент будет запущен с одним значением GPG_TTY, во второй сессии будет другое значение.
(Ответ для Alexey Gladkov на комментарий #10) > А запуск агента на удалённой машине это принципиальное решение ? > Не пробовал прокидывать сокет агента на удалённую машину прокидывать ? > > https://wiki.gnupg.org/AgentForwarding Я так делал, и у меня получалось. Правда, это было на p9.
(Ответ для Alexey Gladkov на комментарий #12) > Если вы запускаешь агента там, то даже если экспортировать GPG_TTY как у > тебя работает ssh, logout, ssh обратно на эту же машину ? > Агент будет запущен с одним значением GPG_TTY, во второй сессии будет другое > значение. Над этим моментом не задумывался. Действительно, у меня работает. Не знаю почему, возможно, потому что pinentry умный, или еще что-то. Провел эксперимент. захожу по ssh (на p9) в gpg-agent.conf указал чтобы пароль быстро тух default-cache-ttl 2 убил агента gpgconf --kill gpg-agent запустил агента (в p9) gpg-connect-agent gpg-connect-agent: агент gpg не работает - запускаем '/usr/bin/gpg-agent' gpg-connect-agent: ожидаю подключения agent ... (5с) gpg-connect-agent: соединение с agent установлено tty /dev/pts/2 запустил еще сессию. tty /dev/pts/4 агент старый gpg2 --decrypt ~/test.txt.gpg спросил пароль на /dev/pts/4 (если не уменьшать default-cache-ttl, то агент просто отдает закешированный пароль). git tag -s -m test test1 Необходима фраза-пароль для доступа к секретному ключу пользователя: "Igor Vlasenko <viy@altlinux.org>" 1024-битный ключ DSA, ID 845A2763, создан 2004-09-24 тег появился и подписан: git show test1: tag test1 Tagger: Igor Vlasenko <viy@altlinux.org> Date: Mon Dec 6 23:21:26 2021 +0200 test -----BEGIN PGP SIGNATURE----- iEYEABECAAYFAmGuftYACgkQDX9MpIRaJ2OQ8ACeIXOkXDMJyuUlaULMhFcxhQrw 7GMAoJhEDpaBAjDYFSUszn4Kweoh9jc1 =AXP0 -----END PGP SIGNATURE----- Надо смотреть исходники, без этого непонятно, почему все работает. может быть gpg2 передает правильный GPG_TTY агенту? 1 сеанс echo $GPG_TTY /dev/pts/2 2 сеанс echo $GPG_TTY /dev/pts/4
(Ответ для viy на комментарий #14) > Надо смотреть исходники, без этого непонятно, почему все работает. > может быть gpg2 передает правильный GPG_TTY агенту? похоже так и есть. посмотрел в исходники, (см. agent/command.c) там обрабатывается команда OPTION. и там OPTION ttyname как раз и переустанавливает GPG_TTY. там и $DISPLAY перекрывается, и $TERM. поэтому pinentry выводится не на том терминале, с которого когда-то был запущен gpg-agent, а на терминале, на котором реально происходит подписывание с помощью gpg2. Конечно, при условии, что при логине profile выставляет GPG_TTY.
(Ответ для viy на комментарий #15) > похоже так и есть. посмотрел в исходники, > (см. agent/command.c) там обрабатывается команда OPTION. > и там > OPTION ttyname > как раз и переустанавливает GPG_TTY. > там и $DISPLAY перекрывается, и $TERM. Да, действительно. Я верну gnupg-agent.sh и верну выставление GPG_TTY.
Fixed in 2.2.33-alt1
Благодарю! И в p10 скопируйте, пожалуйста.
(Ответ для viy на комментарий #18) > Благодарю! И в p10 скопируйте, пожалуйста. Это уже не ко мне.
ок, тогда я отправил. task #291675: added #100: build tag "2.2.33-alt1" from /gears/g/gnupg2.git task #291675: try #1 is AWAITING, result will be emailed to viy@altlinux.org