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?
M-x getenv SSH_AGENT_PID
?M-x getenv SSH_AUTH_SOCK
Respuestas:
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.
(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.
fuente
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):
M-x keychain-refresh-environment
y ahora debería funcionar.(keychain-refresh-environment)
en su init.el, para que la solución funcione después de reiniciar EmacsY eso es todo, suponiendo que su agente ssh esté configurado y ejecutándose.
Muy buena descripción, del comentario del paquete:
fuente
keychain
.FWIW,
keychain
ahora tiene un--systemd
interruptor, 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.fuente