J'ai googlé et lu la FAQ et le Wiki pour Magit, mais je n'arrive toujours pas à comprendre cela, je ne trouve que des réponses sur Windows ...
Comment puis-je configurer Magit pour utiliser ma session ssh-agent en cours d'exécution et ne pas demander mon mot de passe lors d'un push.
J'exécute linux, et j'ai le démarrage de ssh-agent avec mon terminal et déverrouille ensuite ma clé, ce qui me permet de faire git push, etc. sans me faire entrer le mot de passe à chaque fois.
Env:
Arch Linux
Emacs 24.4
ssh-agent avec des clés ajoutées, pour déverrouiller sur le premier terminal ouvert.
EDIT: Je voulais dire en utilisant la phrase secrète, vous savez pour la clé ssh, et al.
Et je pousse à Bitbucket, mais je crois que le problème clé est que Magit ne parle pas / ne reconnaît pas mon agent ssh.
Peut-être qu'il y a une configuration à définir, pour lui dire que je l'exécute ??
M-x getenv SSH_AGENT_PID
?M-x getenv SSH_AUTH_SOCK
Réponses:
Eh bien, cela s'est avéré être plus un trou de lapin que je ne le pensais ... Et pour ce que je peux comprendre, il n'y a pas de meilleure solution pour ce problème spécifique, avec cette combinaison de bureau, ssh-agent, emacs.
Problème 1
XFCE démarrait son propre agent ssh avec la session, sans le dire nulle part, ce qui a fait que le système a 1 agent ssh global inutilisé et mon agent déverrouillé spécifique au shell.
Sur un autre DE, vous pouvez exécuter le même problème et devrez trouver les détails pour désactiver le démarrage automatique de l'agent.
Solution 1
Exécutez cette commande pour désactiver l'exécution de l'agent ssh de démarrage
xfconf-query -c xfce4-session -p /startup/ssh-agent/enabled -n -t bool -s false
Problème 2
Maintenant, Emacs n'a pas de variables SSH_AGENT_PID et SSH_AUTH_SOCK définies, donc rien sur l'environnement chargé. Évidemment, Magit demande toujours la clé car il ne connaît pas le nouvel agent ssh que nous avons commencé.
Solution 2
Nous devons avoir Emacs récupérer ces nouvelles variables de l'environnement, mais bien sûr, pas de façon simple.
Entrez: exec-path-from-shell qui vous permet de récupérer les variables d'environnement de votre shell. Donc.
(require 'exec-path-from-shell) (exec-path-from-shell-copy-env "SSH_AGENT_PID") (exec-path-from-shell-copy-env "SSH_AUTH_SOCK")
Merci les gars pour la suggestion de regarder les variables SSH _ **, qui m'ont indiqué la bonne direction.
la source
Une autre solution pour les paresseux consiste à simplement utiliser un package qui gère exactement ce cas (en définissant les variables d'environnement liées au trousseau d'Emacs):
M-x keychain-refresh-environment
et maintenant ça devrait marcher.(keychain-refresh-environment)
dans votre init.el, pour que la solution fonctionne après le redémarrage d'EmacsEt c'est tout, en supposant que votre agent ssh est configuré et fonctionne.
Très bonne description, du commentaire du paquet:
la source
keychain
.FWIW, a
keychain
maintenant un--systemd
commutateur, qui injectera les variables dans l'environnement utilisateur systemd.La solution la plus simple que j'ai trouvée était d'ajouter
eval "$(keychain --eval --quiet --noask --systemd keys...)"
à un script exécuté à partir de l'unité systemd pour démarrer le serveur Emacs.la source