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 mnieOdpowiedzi:
Strona gpg-agent mężczyzna wyjaśnia w opcji
--enable-ssh-support
, że protokół agenta ssh nie jest w stanie podać nazwę tty do środka, więc domyślne użyciem oryginalnego terminalu w jakiej został uruchomiony. Przed uruchomieniem komendy ssh, który wymaga hasło w nowym terminalu, który musisz wpisaćw nowym terminalu, aby zaktualizować widok agenta, którego tty lub wyświetlacza użyć.
źródło
gpg2
nie mają pojęcia, jak to jest mieć przepływ pracy / styl życia zorientowany na wiersze poleceń. W jakiś sposób ludzie, których podstawowa koncepcja typowej obsługi komputera zaczyna się i kończy w granicach okien GUI, muszą podejmować decyzje, które wpływają na narzędzie, które wcześniej było wygodnie używane w wierszu poleceń.gpg
nigdy nie można poprosić o hasło na niewłaściwym terminalu, podczas gdygpg2
łatwo.gpg
Komenda zawsze poprosić o haśle na terminal ty wykonywanego polecenia od ponieważ faktycznie tworząc hasło zostało zrobione z tego drzewa procesowego. Alegpg2
jest tak zakodowany, że nie może tego zapewnić, ponieważ musi poprosić o osobny, długo działający proces agenta, aby poprosić o hasło, a agent mógł początkowo uruchomić na innym terminalu.gpg2
i agent mógł, ale nie był, zakodowany, aby obejść ten problem.gpg2
Projekt ma sens tylko wtedy, gdy realizowane przez ludzi, którzy nie Grok aspekty istotne z CLI jak Linux / Unix działa i nie mają dobre poczucie tego, co sprawia, że interfejsy i oprzyrządowania dobro do komponowania w dowolnych kombinacjach.Jeśli chodzi o błąd nadrzędny w stosunku do openssh, właściwym sposobem jest dodanie następujących elementów do
~/.ssh/config
:Do tej pory działało to dla mnie idealnie.
źródło
GPG_TTY
należy ustawić,$(tty)
aby to działało.