【发布时间】:2020-03-23 11:39:58
【问题描述】:
我很难为 Emacs 设置 pinentry 以使用身份验证(比如说 github)。使用 GPG 和 pinentry 对提交进行签名已经有效。我在 emacs 中使用 magit 进行版本控制,每次我提交一些 pinentry 都会在 minibuffer 中弹出,我输入我的密码并签署提交。都很好。
不过,我也使用 GPG 进行身份验证。我setup 和 GPG 的身份验证子密钥并设置 SSH 以使用它。如果我从 tty 执行此操作,它也可以。只是不是来自 Emacs 内部。这个问题与$GPG_TTY env var 有关。如果我尝试将某些内容推送到 GH,则不会弹出 minibuffer 中的 pinentry。相反,它等待并最终说我没有权限。
我应该提到我使用 emacs,更具体地说是 EXWM 作为我的窗口管理器。如果我退出 emacs,我会在我的 TTY 中看到 pinentry-encurses 对话框。如果我在按下时在 emacs 中打开了另一个终端,它将在该终端中打开 pinentry-ncurses 对话框,而不是在 minibuffer 中弹出 pinentry.el。
我这几天一直在谷歌上搜索并尝试不同的方法,但没有运气。
~/.gnupg/gpg-agent.conf:
allow-emacs-pinentry
allow-loopback-pinentry
default-cache-ttl 600
max-cache-ttl 7200
enable-ssh-support
~/.gnupg/gpg.conf:
use-agent
~/.bash_profile:
# GPG related
export SSH_AUTH_SOCK=$(gpgconf --list-dirs agent-ssh-socket)
export GPG_TTY=$(tty)
#gpgconf --launch gpg-agent
我在 emacs 中的 pinentry 配置:
;; Enable loopback so that pinentry will pop up in emacs
(setq epa-pinentry-mode 'loopback)
(pinentry-start)
;; Update the TTY for gpg-agent
;(setenv "GPG_TTY" "/dev/pts/0")
(shell-command "gpgconf --launch-agent")
(shell-command "gpg-connect-agent updatestartuptty /bye >/dev/null")
我尝试在 emacs 中手动设置$GPG_TTY,正如您所见,没有运气。令我困惑的是,它仅适用于签署提交,但不适用于身份验证。
【问题讨论】:
-
我在使用 spacemacs 时遇到了完全相同的问题。
标签: git authentication emacs gnupg