我使用基于ssh密钥的身份验证,密钥保存在智能卡上。我正在迁移到一台新机器,在我以前的机器中,我很好地设置了Emacs+Tramp的工作流程。
然而,现在我遇到了一些问题。我找到了一个解决方案,但我想知道是否有更好的方法。
设置
如果我有一个带有以下条目的.ssh/config
:
Host remote
HostName 1.2.3.4
User root
remote
已经授权了我的SSH密钥,如果我在普通shell中运行ssh remote
,系统会提示我输入智能卡pin,并且可以进行SSH而不会出现任何问题。
然而,在使用tramp的Emacs中,我通常会通过ssh输入ssh:remote:
的文件路径。然而,在我的新安装中,它会提示我输入用户名,然后输入密码。
首次尝试
根据这个答案的建议,我提高了tramp的日志级别。
它显示tramp正在运行以下命令:exec ssh -o ControlMaster=auto -o ControlPath='tramp.%C' -o ControlPersist=no -e none remote
。在一个正常的shell中运行这个程序可以像预期的那样工作。
我发现在eshell中运行ssh remote
也有同样的问题。
我想Emacs可能无法访问我的~/.bashrc
配置,在那里我配置了我的智能卡详细信息:
export GPG_TTY="$(tty)"
export SSH_AUTH_SOCK=$(gpgconf --list-dirs agent-ssh-socket)
gpgconf --launch gpg-agent
解决方案(有更好的方案吗?)
这个答案建议使用bash -c emacs
启动Emacs。
这最终解决了问题,但我想知道是否有更稳健的解决方案,即在我的config.el
文件中编码的解决方案或类似的解决方案。
setenv
。最后,Spacemacs和Doom有自己的处理方式,我看到你提到了config.el,不确定你是否在使用Doom,你也可以参考它们。