2017-02-09 19 views
3

Я запускаю emacs в режиме сервера в качестве системной пользовательской службы и хочу вытащить из удаленного хранилища с помощью панели, используя magit. К сожалению, magit (или его дочерний процесс git) не может использовать мой уже загруженный открытый ключ. По-видимому, я не могу подключиться к моему ssh-агенту из контекста emacs.Использование ssh-агента из emacs в режиме сервера

Run внутри Emacs:

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

Есть известный способ решить эту проблему или я должен копаться в том, как SSH-агент и клиент на самом деле общаться?

+0

'SSH-agent' выводит некоторые переменные среды (в виде исходного сценария оболочки) при запуске. Если этот агент все еще запущен, и вы написали эти настройки в читаемом файле, я считаю, что вы должны иметь возможность подключиться к этому агенту, читая эти значения в своей среде. Вы можете управлять этим самостоятельно или использовать что-то вроде [keychain] (https://linux.die.net/man/1/keychain). – phils

ответ

2

Агент ssh должен работать в родительском процессе процесса, который вы хотите использовать. Вот почему он часто запускается как часть настройки для оконного менеджера - все подпроцессы оконного менеджера, то есть терминалов и программ, запускаемых пользователем, смогут использовать ssh-agent.

В вашем случае вы могли бы запустить ssh-agent в качестве родительского процесса в своей пользовательской службе systemd, которая запускает emacs, но тогда, конечно, ваш агент не будет работать с другими приложениями, например, с терминалов, открытых под вашим wm ,

2

Я использую keychain для управления ssh-агентами. Он запускает агент и выдает соответствующие параметры (агент PID и сокет) в сценарий, который может быть получен оболочкой. Там есть пакет Emacs keychain-environment, который может вытащить его в Emacs.

~/.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)