Magit, cómo usar el agente ssh del sistema y no solicitar contraseña

19

Busqué en Google y leí las preguntas frecuentes y Wiki para Magit, pero aún no puedo resolver esto, todo lo que encuentro son respuestas sobre Windows ...

¿Cómo puedo configurar Magit para usar mi sesión de ssh-agent en ejecución y no pedir mi contraseña cuando hago una inserción?

Estoy ejecutando Linux, y tengo el inicio de ssh-agent con mi terminal y luego desbloqueo mi clave, lo que me permite hacer git push, etc. sin tener que ingresar la contraseña cada vez.

Env:
Arch Linux
Emacs 24.4

ssh-agent con claves agregadas, para desbloquear en la primera terminal abierta.

EDITAR: me refería al uso de frase de contraseña, ya sabes para la clave ssh, et al.
Y estoy presionando a Bitbucket, pero creo que el problema clave es que Magit no está hablando / reconociendo a mi agente ssh.
¿Quizás hay alguna configuración para configurar, para decirle que la estoy ejecutando?

Andres
fuente
En realidad vino con la misma pregunta.
emacsomancer
¿Cuál es la URL remota? http: // o git: //?
Nsukami _
[email protected] en este caso, configurado de esta manera: url = [email protected]:
Andres
¿Puede decirnos qué regresa Emacs cuando lo haga M-x getenv SSH_AGENT_PID? M-x getenv SSH_AUTH_SOCK
Nsukami _
SSH_AGENT_PID = 602 SSH_AUTH_SOCK = /tmp/ssh-13kI6AaYvgji/agent.601
Andrés

Respuestas:

13

Bueno, esto resultó ser más un agujero de conejo de lo que pensé ... Y por lo que puedo deducir, no hay una mejor solución para este problema específico, con esta combinación de escritorio, ssh-agent, emacs.

Problema 1
XFCE estaba iniciando su propio agente ssh con la sesión, sin decirlo en ninguna parte, lo que provocó que el sistema tuviera 1 agente ssh global sin usar y mi agente desbloqueado específico de shell.
En un DE diferente, puede ejecutar el mismo problema y necesitará encontrar los detalles para deshabilitar el inicio automático del agente.

Solución 1
Ejecute este comando para deshabilitar la ejecución del ssh-agent de inicio

xfconf-query -c xfce4-session -p /startup/ssh-agent/enabled -n -t bool -s false

Problema 2
Ahora Emacs no tiene ninguna variable SSH_AGENT_PID y SSH_AUTH_SOCK establecida, por lo que no hay nada en el entorno cargado. Obviamente, Magit todavía pide la clave ya que no sabe sobre el nuevo agente ssh que comenzamos.

Solución 2
Necesitamos que Emacs obtenga estas nuevas variables del entorno, pero, por supuesto, no hay una forma directa.
Ingrese: exec-path-from-shell que le permite obtener variables de entorno de su shell. Entonces.

  1. Instale el paquete exec-path-from-shell de la manera que prefiera.
  2. Agregue el siguiente código a su init.el para que se cargue cuando inicie Emacs.

(require 'exec-path-from-shell) (exec-path-from-shell-copy-env "SSH_AGENT_PID") (exec-path-from-shell-copy-env "SSH_AUTH_SOCK")

Gracias a todos por la sugerencia de mirar las variables SSH _ **, que me apuntaron en la dirección correcta.

Andres
fuente
¿Alguna razón particular por la que no está satisfecho con el agente de XFCE y desea ejecutar el suyo propio? Abandonar eso parecería la solución más simple.
tripleee
No siempre ejecuto XFCE, ni me importa cómo lo gestiona el escritorio, prefiero el complemento que lo maneja desde oh-my-zsh. Entonces es más fácil para mí omitir el caso de uso predeterminado. (De acuerdo, no sé lo suficiente sobre el agente ... pero no es algo en lo que realmente quiera pasar el tiempo pensando de todos modos)
Andrés
Tal vez Zsh debería reconocer el caso cuando un agente ya se está ejecutando, y diferir a eso en su lugar; pero obviamente, esto está saliendo de tema aquí.
tripleee
1
Tal vez ssh-agency debería extenderse para que funcione también en sistemas similares a Unix.
npostavs
7

Otra solución para los perezosos es usar un paquete que maneje exactamente este caso (configurando las variables de entorno relacionadas con el llavero de Emacs):

  1. Instale y agregue a su paquete init.el keychain-environment .
  2. Corre M-x keychain-refresh-environmenty ahora debería funcionar.
  3. Coloque (keychain-refresh-environment)en su init.el, para que la solución funcione después de reiniciar Emacs

Y eso es todo, suponiendo que su agente ssh esté configurado y ejecutándose.

Muy buena descripción, del comentario del paquete:

Keychain es un script que administra ssh-agent y gpg-agent. Normalmente se ejecuta desde el archivo de inicialización del shell. Permite que sus shells y trabajos cron compartan un solo agente ssh y / o gpg-agent.

Cuando se ejecuta keychain, comprueba si hay un agente en ejecución; de lo contrario, los inicia. Guarda las variables de entorno de los agentes en archivos dentro de ~ / .keychain /, para que los shells posteriores puedan obtener estos archivos.

Cuando Emacs se inicia bajo X11 y no directamente desde un terminal, estas variables no se establecen. Esta biblioteca busca estos archivos creados por keychain y luego establece las variables de entorno de Emacs en consecuencia. En realidad, no ejecuta keychain, por lo que aún debe ejecutarlo desde un shell de inicio de sesión.

Para usar, ejecute la función `keychain-refresh-environment 'en su archivo init. Si todavía no se ha ejecutado el llavero cuando inicia Emacs, también puede llamar a esa función de forma interactiva.

Ver también: http://www.funtoo.org/wiki/Keychain

tlegutko
fuente
1
Esto es exactamente lo que necesitaba ya que ya lo uso keychain.
xji
1

FWIW, keychainahora tiene un --systemdinterruptor, que inyectará las variables en el entorno del usuario systemd.

La solución más simple que encontré fue agregar eval "$(keychain --eval --quiet --noask --systemd keys...)"un script que se ejecuta desde la unidad systemd para iniciar el servidor Emacs.

Vladimir Panteleev
fuente