Magit, wie man den ssh-Agenten des Systems benutzt und nicht nach dem Passwort fragt

19

Ich habe die FAQ und das Wiki für Magit gegoogelt und gelesen, kann das aber immer noch nicht herausfinden. Alles, was ich finde, sind Antworten zu Windows ...

Wie kann ich Magit so konfigurieren, dass es meine laufende ssh-agent-Sitzung verwendet und nicht nach meinem Passwort fragt, wenn ich einen Push mache?

Ich lasse Linux laufen, starte den ssh-agent mit meinem Terminal und entsperre dann meinen Schlüssel, wodurch ich Git-Push usw. ausführen kann, ohne jedes Mal das Passwort eingeben zu müssen.

Env:
Arch Linux
Emacs 24.4

ssh-agent mit hinzugefügten Schlüsseln zum Entsperren beim ersten Öffnen des Terminals.

EDIT: Ich meinte mit Passphrase, wissen Sie für den SSH-Schlüssel, et al.
Und ich dränge zu Bitbucket, aber ich glaube, das Hauptproblem ist, dass Magit meinen ssh-Agenten nicht erkennt.
Vielleicht gibt es eine Konfiguration, um zu sagen, dass ich es laufe?

Andres
quelle
Eigentlich kam mit der gleichen Frage.
Emacsomancer
Was ist die Remote-URL? http: // oder git: //?
Nsukami _
[email protected] in diesem Fall wie folgt einrichten: url = [email protected]:
Andres
Können Sie uns sagen, was Emacs zurückbringt, wenn Sie das tun 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

Antworten:

13

Nun, es stellte sich heraus, dass dies eher ein Kaninchenbau war als ich ... Und für dieses spezielle Problem gibt es keine bessere Lösung mit dieser Kombination aus Desktop, SSH-Agent und Emacs.

Problem 1
XFCE startete seinen eigenen SSH-Agenten mit der Sitzung, ohne dies tatsächlich irgendwo zu sagen, was dazu führte, dass das System einen nicht verwendeten globalen SSH-Agenten und meinen Shell-spezifischen entsperrten Agenten hatte.
Auf einem anderen DE werden Sie möglicherweise mit demselben Problem ausgeführt und müssen die Details ermitteln, um den automatischen Start des Agenten zu deaktivieren.

Lösung 1
Führen Sie diesen Befehl aus, um die Ausführung des Start-SSH-Agenten zu deaktivieren

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

Problem 2 In
Emacs sind jetzt keine SSH_AGENT_PID- und SSH_AUTH_SOCK- Variablen festgelegt, sodass in der geladenen Umgebung nichts vorhanden ist. Offensichtlich fragt Magit immer noch nach dem Schlüssel, da er nichts über den neuen ssh-Agenten weiß, den wir gestartet haben.

Lösung 2
Wir brauchen Emacs, der diese neuen Variablen aus der Umgebung abruft, aber natürlich keinen direkten Weg.
Geben Sie Folgendes ein : exec-path-from-shell , mit dem Sie Umgebungsvariablen von Ihrer Shell abrufen können. So.

  1. Installieren Sie das Paket exec-path-from-shell wie gewünscht.
  2. Fügen Sie Ihrem init.el den folgenden Code hinzu, damit er beim Starten von Emacs geladen wird .

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

Vielen Dank für den Vorschlag, die SSH _ ** -Variablen zu betrachten, der mich in die richtige Richtung gelenkt hat.

Andres
quelle
Gibt es einen bestimmten Grund, warum Sie mit dem XFCE-Agenten nicht zufrieden sind und Ihren eigenen ausführen möchten? Das aufzugeben scheint die einfachere Lösung zu sein.
Tripleee
Ich führe XFCE nicht immer aus und kümmere mich auch nicht darum, wie der Desktop es verwaltet. Ich bevorzuge das Plugin, das es von oh-my-zsh verarbeitet. So fällt es mir leichter, den Standardanwendungsfall zu überspringen. (Zugegeben, ich weiß fast nicht genug über den Agenten ... aber darüber möchte ich sowieso nicht wirklich nachdenken.)
Andres
Vielleicht sollte Zsh den Fall erkennen, in dem ein Agent bereits ausgeführt wird, und stattdessen darauf verzichten. aber offensichtlich wird dies hier nicht zum Thema.
Tripleee
1
Vielleicht sollte ssh-agency erweitert werden, um auch auf Unix-ähnlichen Systemen zu arbeiten.
Npostavs
7

Eine andere Lösung für die Faulen besteht darin, nur ein Paket zu verwenden, das genau diesen Fall behandelt (Setzen der Emacs-Umgebungsvariablen für den Schlüsselbund):

  1. Installieren Sie die Schlüsselbundumgebung Ihres init.el-Pakets und fügen Sie sie hinzu .
  2. Laufen M-x keychain-refresh-environmentund jetzt sollte es funktionieren.
  3. Platzieren Sie (keychain-refresh-environment)in Ihrem Init.el, damit die Lösung nach dem Neustart von Emacs funktioniert

Vorausgesetzt, Ihr ssh-agent ist konfiguriert und läuft.

Wirklich gute Beschreibung, aus dem Kommentar des Pakets:

Keychain ist ein Skript, das ssh-agent und gpg-agent verwaltet. Es wird normalerweise über die Initialisierungsdatei der Shell ausgeführt. Es ermöglicht Ihren Shells und Cronjobs, einen einzelnen SSH-Agenten und / oder GPG-Agenten gemeinsam zu nutzen.

Wenn der Schlüsselbund ausgeführt wird, wird geprüft, ob der Agent ausgeführt wird, andernfalls werden sie gestartet. Die Umgebungsvariablen der Agenten werden in Dateien in ~ / .keychain / gespeichert, sodass nachfolgende Shells diese Dateien als Quelle verwenden können.

Wenn Emacs unter X11 und nicht direkt von einem Terminal aus gestartet wird, werden diese Variablen nicht gesetzt. Diese Bibliothek sucht nach diesen Dateien, die mit dem Schlüsselbund erstellt wurden, und legt die Umgebungsvariablen von Emacs entsprechend fest. Es wird eigentlich kein Schlüsselbund ausgeführt, daher müssen Sie diesen zunächst über eine Anmeldeshell ausführen.

Führen Sie zur Verwendung die Funktion `keychain-refresh-environment 'in Ihrer Init-Datei aus. Wenn der Schlüsselbund beim Starten von Emacs noch nicht ausgeführt wurde, können Sie diese Funktion auch später interaktiv aufrufen.

Siehe auch: http://www.funtoo.org/wiki/Keychain

tlegutko
quelle
1
Genau das habe ich gebraucht, da ich es bereits benutze keychain.
Xji
1

FWIW hat keychainjetzt einen --systemdSchalter, der die Variablen in die Benutzerumgebung des Systems einfügt .

Die einfachste Lösung, die ich gefunden habe, war das Hinzufügen eval "$(keychain --eval --quiet --noask --systemd keys...)"eines Skripts, das von der systemd-Einheit ausgeführt wurde, um den Emacs-Server zu starten.

Vladimir Panteleev
quelle