我使用基于ssh密钥的身份验证,将密钥保存在智能卡上。我正在迁移到一台新机器,在我的前一台机器中,我用工作流很好地设置了Emacs+Tramp。
不过,现在我有问题了。我找到了一个解决办法,但我想知道是否有更好的方法。
设置
如果我有一个包含以下条目的.ssh/config:
Host remote
HostName 1.2.3.4
User rootremote已经授权了我的SSH密钥,如果我在一个普通的shell中运行ssh remote,我会被提示输入我的智能卡引脚,并且可以在没有问题的情况下获得SSH。
但是,在使用tramp的Emacs中,我通常会将ssh输入到ssh:remote:的文件路径中。但是,在我的新安装中,它会提示我输入用户名,然后输入密码。
首次尝试
按照这个答案的建议,我增加了tramp的日志级别。
它向我展示了tramp正在运行以下命令:exec ssh -o ControlMaster=auto -o ControlPath='tramp.%C' -o ControlPersist=no -e none remote。在正常的shell中运行此操作就像预期的那样。
我发现在地狱运行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文件中编码的解决方案,或者类似的解决方案。
发布于 2022-04-18 01:42:01
正如您所看到的,这个问题是由Emacs和shell环境变量之间的不一致引起的。您可以使用exec-通道到外壳,特别是在使用macOS时。或者您只需手动setenv即可。最后,Spacemacs和Doom有自己的处理方法,我看到您提到了config.el,不确定您是否在使用Doom,您也可以参考它们。
https://stackoverflow.com/questions/71902956
复制相似问题