Mac系统下Emacs使用SSH访问远程文件时GPG报错问题求助
解决方案
- 第一步:修正认证源配置,跳过GPG加密的认证信息查找
把下面的配置加入你的Emacs配置文件(通常是~/.emacs或者~/.emacs.d/init.el),重启Emacs生效:;; 优先使用未加密的netrc/authinfo存储认证,跳过gpg解密步骤 (setq auth-sources '("~/.netrc" "~/.authinfo")) ;; 强制Tramp使用系统ssh原生认证逻辑,不额外处理密钥 (setq tramp-default-method "ssh" tramp-use-ssh-controlmaster-options t) - 第二步:修正SSH配置避免Tramp找不到对应密钥
打开~/.ssh/config文件,添加对应远程主机的配置,明确指定密钥路径:
配置后你可以直接用Host your-remote-host-alias # 替换成你实际的远程主机地址或者别名 HostName 实际远程IP/域名 User 远程登录用户名 IdentityFile ~/.ssh/id_rsa IdentitiesOnly yes/ssh:your-remote-host-alias:/path/to/file的格式访问远程文件,不需要每次输用户名和主机地址。 - 第三步:清理Tramp残留缓存
如果配置后仍然卡死,在Emacs中执行M-x tramp-cleanup-all-connections清理所有历史Tramp连接缓存,再重启Emacs重试即可。
问题原因说明
你遇到的GPG报错和卡死逻辑是:
Emacs GUI版在macOS上默认不会继承终端的ssh-agent会话,Tramp访问远程文件时会优先读取加密的~/.authinfo.gpg文件获取认证信息,如果你没有创建过这个GPG加密的认证文件,就会先抛出GPG解密错误;后续弹出的密码框实际是要求你输入GPG密钥的密码,而非SSH私钥的密码,你输入SSH密钥密码后验证不通过就会触发卡死。
而Magit底层直接调用系统ssh命令,会自动读取系统钥匙串中解锁的SSH密钥,所以不会出现认证问题。
内容的提问来源于stack exchange,提问作者thibault
相关产品推荐
相关产品推荐

