我在 arch linux 上使用 openssh7.5p1 和 gnupg 2.1.21 (这些是 arch 附带的默认版本)。我想用作gpg-agent
ssh 代理。我将以下内容放入我的~/.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-agent
openssh 附带的密钥,它们也可以正常工作。
文档说应该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 解决了这里的问题。