Использование агента 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.