You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.24 13:54:02