use*_*445 15 openssh ssh-agent gpg-agent
我在 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
Run Code Online (Sandbox Code Playgroud)
Arch 自动从 systemd 启动一个 gpg-agent,所以我设置
export SSH_AUTH_SOCK="$XDG_RUNTIME_DIR/gnupg/S.gpg-agent.ssh"
Run Code Online (Sandbox Code Playgroud)
当我运行时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
Run Code Online (Sandbox Code Playgroud)
所有其他 gpg 功能正常工作(加密/解密/签名)。此外,如果我直接将它们与 ssh 一起使用,我生成的密钥可以正常工作,如果我运行ssh-agent
openssh 附带的密钥,它们可以正常工作。
文档说ssh-add
应该将密钥添加到~/.gnupg/sshcontrol
,但显然没有发生任何事情。
我的问题:什么是可以载入的OpenSSH的生成的密钥最简单的方式ssh-keygen
进入gpg-agent
,并且有人可以剪切和粘贴出这是如何工作的一个终端会话?
use*_*445 40
答案显然是运行:
echo UPDATESTARTUPTTY | gpg-connect-agent
Run Code Online (Sandbox Code Playgroud)
我不知道为什么 pinentry 程序可以很好地用于其他用途,例如解密文件,但不适用于ssh-add
.
虽然这现在有效,但它也会复制一份未显示在 下的 ssh 私钥gpg -Kv
,而且似乎不允许您更改私钥上的密码(因为您无法使用 编辑它--edit-key
) . 基本上,我对这种方式gpg-agent
对您的秘密被复制的位置的可见性很低感到非常不满意。如果您问这个问题是因为您希望gpg-agent
可能是 更好的替代方案ssh-agent
,那么我鼓励您坚持ssh-agent
而不是尝试我的答案。首选的主要原因gpg-agent
是您是否需要使用智能卡。