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


12

我在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-agentopenssh附带的密钥,则它们可以正常工作。

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

我的问题:什么是可以载入的OpenSSH的生成的密钥最简单的方式ssh-keygen进入gpg-agent,并且有人可以剪切和粘贴出这是如何工作的一个终端会话?


接受的答案对我有所帮助,谢谢提出这个问题。对于我来说,这时有发生,有没有永久的解决方案?
gf_19年

Answers:


27

答案显然是在运行:

echo UPDATESTARTUPTTY | gpg-connect-agent

我不知道为什么pinentry程序可以很好地用于其他用途,例如解密文件,但不适用于ssh-add

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


您在哪里找到这个答案?效果很好!
CMCDragonkai,

谢谢你,为我工作。您会定期运行吗?在每次启动/登录时?关于“适当”修复的任何想法吗?
gf_19年


2

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

删除pinentry-emacs并安装GTK pinentry可以解决此问题。


找到一堆告诉我更新启动tty的资源后,这终于解决了我的问题。
威廉·罗森布隆
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.