Lo uso gpg-agent
para administrar ambas identidades PGP e SSH. El agente se inicia con un script como este
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
que se obtiene cada vez que ejecuto un shell interactivo. Todo funciona bien con esta configuración, pero hay un problema. Digamos que yo:
- abrir una terminal (iniciar el agente en segundo plano) y comenzar a trabajar
- después de un tiempo abra una segunda terminal
- hacer una acción que requiera ingresar una frase de contraseña en la segunda terminal
En este punto gpg-agent
comenzará a pinentry-curses
solicitar una frase de contraseña, pero lo hará en el primer terminal, lo que da como resultado que su salida se mezcle con lo que se estaba ejecutando (generalmente un editor de texto) sin forma de reanudar el programa o detener la entrada (comienza a usar 100% de CPU y tengo que matarlo).
Debo estar haciendo algo mal aquí. Alguien ha experimentado esto?
Actualizar:
Me di cuenta de esto sólo ocurre a la solicitud para desbloquear una clave SSH, que se parece a este , mientras que las indicaciones de claves PGP siempre abierto en el (es decir, corriente) TTY correcta.
export GPG_TTY="$(tty)"
eso lo que meRespuestas:
La página de manual de gpg-agent explica bajo la opción
--enable-ssh-support
que el protocolo del agente ssh no puede proporcionar el nombre del tty al agente, por lo que el valor predeterminado es usar el terminal original en el que se inició. Antes de ejecutar el comando ssh que requiere un frase de contraseña en una nueva terminal que necesita escribiren la nueva terminal para actualizar la vista del agente sobre qué tty o pantalla usar.
fuente
gpg2
no tienen idea de cómo es tener un flujo de trabajo / estilo de vida centrado en la línea de comandos. De alguna manera, las personas cuyo concepto fundamental de una experiencia de usuario de computadora típica comienza y termina dentro de los límites de las ventanas de la GUI llegaron a tomar decisiones que afectan una herramienta que anteriormente se podía usar cómodamente en la línea de comandos.gpg
nunca puede solicitar la frase de contraseña en el terminal equivocado, mientras quegpg2
fácilmente puede. Elgpg
comando siempre solicitaría la frase de contraseña en el terminal desde el que ejecutó el comando porque en realidad la creación de la frase de contraseña se realizó desde ese árbol de procesos. Perogpg2
está codificado de tal manera que no puede garantizarlo, ya que tiene que solicitar un proceso de agente de larga duración por separado para solicitar la frase de contraseña, y ese agente podría haberse iniciado originalmente en un terminal diferente.gpg2
y el agente podía, pero no estaba, codificado para solucionar eso.gpg2
diseño solo tiene sentido si lo implementan personas que no asimilan los aspectos relevantes de CLI de cómo funciona Linux / Unix, y no tienen un buen sentido de lo que hace que las interfaces y herramientas sean buenas para componer en combinaciones arbitrarias.Según el error aguas arriba contra openssh, la forma correcta de esto es agregar lo siguiente a su
~/.ssh/config
:Esto me ha funcionado perfectamente hasta ahora.
fuente
GPG_TTY
debe configurarse$(tty)
para que esto funcione.