2017-02-09 3 views
3

Ich benutze Emacs im Server-Modus als System-Benutzer-Service und möchte aus einem Pubkey authentifizierten Remote-Repository mit Magit ziehen. Unglücklicherweise kann magit (oder sein git child-Prozess) meinen bereits geladenen öffentlichen Schlüssel nicht verwenden. Anscheinend kann ich keine Verbindung zu meinem ssh-agent aus dem Kontext von emacs herstellen.Verwendung eines SSH-Agenten von Emacs im Servermodus

Run aus Emacs:

~ ssh-add 
Could not open a connection to your authentication agent. 

Gibt es eine bekannte Art und Weise, diese Frage zu lösen oder muss ich graben, wie ssh-agent und Kunden tatsächlich kommunizieren?

+0

'ssh-agent' gibt einige Umgebungsvariablen (in Form eines quellfähigen Shell-Skripts) aus, wenn es gestartet wird. Wenn dieser Agent noch ausgeführt wird und Sie diese Einstellungen in eine lesbare Datei geschrieben haben, sollten Sie in der Lage sein, eine Verbindung zu diesem Agenten herzustellen, indem Sie diese Werte in Ihre Umgebung einlesen. Sie können das selbst verwalten oder etwas wie [keychain] (https://linux.die.net/man/1/keychain) verwenden. – phils

Antwort

2

Der ssh-Agent muss in einem übergeordneten Prozess des Prozesses ausgeführt werden, den Sie verwenden möchten. Deshalb wird es oft als Teil des Setups für den Fenstermanager gestartet - alle Unterprozesse des Fenstermanagers, d. H. Terminals und Programme, die vom Benutzer ausgeführt werden, können den ssh-Agenten verwenden.

In Ihrem Fall könnten Sie vielleicht ssh-agent als übergeordneter Prozess in Ihrem Systemd-Benutzerdienst ausführen, der Emacs startet, aber dann wird Ihr Agent natürlich nicht mit anderen Anwendungen arbeiten, wie von Terminals, die unter Ihrem wm geöffnet sind .

2

Ich verwende keychain, um ssh-Agenten zu verwalten. Es startet den Agenten und speichert die relevanten Parameter (Agent PID und Socket) in einem Skript, das von einer Shell bezogen werden kann. Es gibt ein Emacs-Paket keychain-environment, das das in Emacs ziehen kann.

~/.bashrc:

# keychain keeps track of ssh-agents 
[ -f $HOME/.keychain/$HOSTNAME-sh ] \ 
    && . $HOME/.keychain/$HOSTNAME-sh 

~/.bash_profile:

# keychain manages ssh-agents 
type keychain >&/dev/null \ 
    && keychain --agents ssh 

~/.emacs.d/init.el:

(require 'keychain-environment) 
(keychain-refresh-environment) 
Verwandte Themen