我在服务器模式下运行emacs作为systemd用户服务,并希望使用magit从pubkey认证的远程存储库中提取。不幸的是,magit(或它的git子进程)无法使用我已经加载的公钥。显然,我无法从emacs的上下文中连接到我的ssh-agent。
在emacs中运行:
~ ssh-add
Could not open a connection to your authentication agent.
有没有一种已知的方法来解决这个问题,还是我必须深入研究ssh-agent和客户端实际上的沟通方式?
答案 0 :(得分:3)
我使用keychain
来管理ssh-agents。它启动代理并将相关参数(代理PID和套接字)转储到可由shell提供的脚本中。有一个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)
答案 1 :(得分:2)
ssh-agent必须在要使用它的进程的父进程中运行。这就是它经常作为窗口管理器设置的一部分启动的原因 - 窗口管理器的所有子流程,即用户运行的终端和程序,都能够使用ssh-agent。
在您的情况下,您可以将ssh-agent作为启动emacs的systemd用户服务中的父进程运行,但当然您的代理将无法用于其他用途,例如在您的wm下打开的终端。