Magit, comment utiliser l'agent ssh du système et ne pas demander de mot de passe

19

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 ??

Andres
la source
En fait, est venu avec la même question.
emacsomancer
Qu'est-ce que l'URL distante? http: // ou git: //?
Nsukami _
[email protected] dans ce cas, configurez comme ceci: url = [email protected]:
Andres
Pouvez-vous nous dire ce qu'Emacs revient quand vous le faites 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
Andres

Réponses:

13

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.

  1. Installez le package exec-path-from-shell de votre manière préférée.
  2. Ajoutez le code suivant à votre init.el afin qu'il se charge lorsque vous démarrez Emacs.

(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.

Andres
la source
Pour une raison particulière, vous n'êtes pas satisfait de l'agent de XFCE et souhaitez gérer le vôtre? L'abandon semble être la solution la plus simple.
tripleee
Je n'exécute pas toujours XFCE, et je ne me soucie pas de la façon dont le bureau le gère, je préfère le plugin qui le gère depuis oh-my-zsh. Il est donc plus facile pour moi de sauter le cas d'utilisation par défaut. (d'accord, je ne sais pas assez de choses sur l'agent ... mais ce n'est pas quelque chose auquel je veux vraiment passer du temps à réfléchir de toute façon)
Andres
Peut-être que Zsh devrait reconnaître le cas où un agent est déjà en cours d'exécution et s'y reporter à la place; mais évidemment, cela devient hors sujet ici.
tripleee
1
Peut - être que ssh-agency devrait également être étendu pour fonctionner sur des systèmes de type Unix.
npostavs
7

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):

  1. Installer et ajouter à votre paquet init.el porte - clés de l' environnement .
  2. Courez M-x keychain-refresh-environmentet maintenant ça devrait marcher.
  3. Placez-le (keychain-refresh-environment)dans votre init.el, pour que la solution fonctionne après le redémarrage d'Emacs

Et c'est tout, en supposant que votre agent ssh est configuré et fonctionne.

Très bonne description, du commentaire du paquet:

Le trousseau est un script qui gère ssh-agent et gpg-agent. Il est généralement exécuté à partir du fichier d'initialisation du shell. Il permet à vos shells et cron jobs de partager un seul agent ssh et / ou gpg-agent.

Lorsque le trousseau est exécuté, il recherche l'agent en cours d'exécution, sinon il les démarre. Il enregistre les variables d'environnement des agents dans des fichiers à l'intérieur de ~ / .keychain /, afin que les shells suivants puissent source ces fichiers.

Lorsque Emacs est démarré sous X11 et non directement depuis un terminal, ces variables ne sont pas définies. Cette bibliothèque recherche ces fichiers créés par le trousseau, puis définit les variables d'environnement d'Emacs en conséquence. Il n'exécute pas réellement le trousseau, vous devez donc toujours l'exécuter à partir d'un shell de connexion.

Pour utiliser, exécutez la fonction `keychain-refresh-environment 'dans votre fichier init. Si le trousseau n'a pas encore été exécuté au démarrage d'Emacs, vous pouvez également appeler cette fonction ultérieurement de manière interactive.

Voir également: http://www.funtoo.org/wiki/Keychain

tlegutko
la source
1
C'est exactement ce dont j'avais besoin puisque j'utilise déjà keychain.
xji
1

FWIW, a keychainmaintenant un --systemdcommutateur, 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.

Vladimir Panteleev
la source