gpg-agent 拒绝 SSH 密钥,ssh-add 报告“代理拒绝操作”

gpg-agent 拒绝 SSH 密钥,ssh-add 报告“代理拒绝操作”

我在 arch linux 上使用 openssh7.5p1 和 gnupg 2.1.21 (这些是 arch 附带的默认版本)。我想用作gpg-agentssh 代理。我将以下内容放入我的~/.gnupg/gpg-agent.conf

pinentry-program /usr/bin/pinentry-qt
enable-ssh-support

Arch 自动从 systemd 启动 gpg-agent,所以我设置

export SSH_AUTH_SOCK="$XDG_RUNTIME_DIR/gnupg/S.gpg-agent.ssh"

当我运行时ssh-add -l,它不报告任何身份并ps报告一个gpg-agent --supervised进程,正如我所期望的那样。

不幸的是,当我运行时ssh-add,无论密钥类型是什么,它都不起作用。以下是我如何尝试 dsa 的示例:

$ ssh-keygen -f testkey -t dsa -N ''
Generating public/private dsa key pair.
Your identification has been saved in testkey.
Your public key has been saved in testkey.pub.
$ ssh-add testkey
Could not add identity "testkey": agent refused operation

所有其他 gpg 功能均正常工作(加密/解密/签名)。另外,如果我直接将它们与 ssh 一起使用,我生成的密钥可以正常工作,如果我运行ssh-agentopenssh 附带的密钥,它们也可以正常工作。

文档说应该ssh-add将密钥添加到~/.gnupg/sshcontrol,但显然什么也没有发生。

我的问题:将 openssh 生成的密钥加载ssh-keygen到 中的最简单方法是什么gpg-agent,有人可以剪切并粘贴一个终端会话来显示其工作原理吗?

答案1

答案显然是运行:

echo UPDATESTARTUPTTY | gpg-connect-agent

我不知道为什么 pinentry 程序对于其他用途(例如解密文件)工作得很好,但对于ssh-add.

虽然现在可以使用,但它还会生成 ssh 私钥的副本,该副本不会显示在 下gpg -Kv,而且似乎不允许您更改私钥上的密码(因为您无法使用 编辑它--edit-key) 。基本上,我对这种方式非常不满意,因为这种方式gpg-agent对您的秘密被复制的位置的可见性很低。如果您提出这个问题是因为您希望gpg-agent它是一个更好的替代方案ssh-agent,那么我鼓励您坚持下去,ssh-agent而不是尝试我的答案。首选的主要原因gpg-agent是您是否需要使用智能卡。

答案2

就我而言,问题出在使用的 pinentry 程序上。我正在使用 pinentry-emacs。它似乎无法处理ssh-add与 gpg-agent 一起使用时触发的双文本字段输入窗口提示。

删除 pinentry-emacs 并安装 GTK pinentry 解决了这里的问题。

相关内容