Я использую gpg-agent
для управления обоими удостоверениями PGP и SSH. Агент запускается с помощью такого скрипта
gpg_agent_env="$XDG_CACHE_HOME/gpg-agent.env"
export GPG_TTY="$(tty)"
if ! ps -U "$USER" -o ucomm | grep -q gpg-agent; then
eval "$({gpg-agent --daemon | tee $gpg_agent_env} 2> /dev/null)"
else
source "$gpg_agent_env" 2> /dev/null
fi
который поставляется каждый раз, когда я запускаю интерактивную оболочку. С этой настройкой все работает нормально, но есть проблема. Допустим, я:
- открыть терминал (запуск агента в фоновом режиме) и начать работать
- через некоторое время откройте второй терминал
- выполнить действие, которое требует ввода пароля во втором терминале
В этот момент gpg-agent
начнется pinentry-curses
запрос пароля, но он будет делать это в первом терминале, что приведет к тому, что его выходные данные будут смешаны с тем, что было запущено (обычно текстовым редактором), без возможности возобновить программу или прекратить ввод кода (он запускается с использованием 100% ЦП). и я должен убить его).
Я должен делать что-то не так здесь. Кто-нибудь испытал это?
Обновить:
Я выяснил, что это происходит только для приглашения разблокировать ключ SSH, который выглядит следующим образом , в то время как запросы для ключей PGP всегда открываются на правильном (то есть текущем) tty.
export GPG_TTY="$(tty)"
это исправило это для меня