Emacs Tramp智能卡配置



我使用基于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文件中编码的解决方案或类似的解决方案。

正如您所看到的,这个问题是由Emacs和shell环境变量之间的不一致引起的。您可以使用shell中的exec路径,尤其是在使用macOS的情况下。或者您可以手动setenv。最后,Spacemacs和Doom有自己的处理方式,我看到你提到了config.el,不确定你是否在使用Doom,你也可以参考它们。

相关内容

  • 没有找到相关文章

最新更新