Использование агента ssh из emacs в режиме сервера

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

Запустите из Emacs:

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

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

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)

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

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

Другие вопросы по тегам