Używam gpg-agent
do zarządzania zarówno tożsamością PGP e SSH. Agent jest uruchamiany za pomocą takiego skryptu
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
który jest pozyskiwany za każdym razem, gdy uruchamiam interaktywną powłokę. Wszystko działa dobrze z tą konfiguracją, ale jest problem. Powiedzmy, że:
- otwórz terminal (uruchamianie agenta w tle) i zacznij działać
- po chwili otwórz drugi terminal
- wykonaj czynność, która wymaga wprowadzenia hasła w drugim terminalu
W tym momencie gpg-agent
zacznie pinentry-curses
się pojawiać monit o podanie hasła, ale zrobi to w pierwszym terminalu, co spowoduje, że jego wynik zostanie pomieszany z tym, co działało (zwykle edytor tekstowy), bez możliwości wznowienia programu lub zatrzymania pinentry (zaczyna używać 100% procesora i muszę to zabić).
Muszę tu robić coś złego. Czy ktoś tego doświadczył?
Aktualizacja:
I zorientowali się, to dzieje się tylko na monit, aby odblokować klucz SSH, który wygląda jak ten , gdy poprosi o klucze PGP zawsze otwarty na właściwej (czyli aktualnej) tty.
export GPG_TTY="$(tty)"
to dla mnie