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?
M-x getenv SSH_AGENT_PID
?M-x getenv SSH_AUTH_SOCK
Antworten:
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.
(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.
quelle
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):
M-x keychain-refresh-environment
und jetzt sollte es funktionieren.(keychain-refresh-environment)
in Ihrem Init.el, damit die Lösung nach dem Neustart von Emacs funktioniertVorausgesetzt, Ihr ssh-agent ist konfiguriert und läuft.
Wirklich gute Beschreibung, aus dem Kommentar des Pakets:
quelle
keychain
.FWIW hat
keychain
jetzt einen--systemd
Schalter, 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.quelle