我最近尝试从标准 ssh 公钥设置迁移到使用 GPG 管理我的密钥。下列的指示在我的发行版 wiki 上,我设置了 ssh 来gpg-agent
代替默认的ssh-agent
。我确信一切顺利:即使~/.ssh
删除了我的目录,ssh-add -l
也会显示我在 gpg 中为其设置的一个密钥。
之后,我将远程的内容设置~/.ssh/authorized_keys
为本地的输出ssh-add -L
,并重新启动守护进程。
现在尝试使用连接到我的遥控器ssh -v <myremote>
,我收到以下错误:
...
debug1: SSH2_MSG_SERVICE_ACCEPT received
debug1: Authentications that can continue: publickey
debug1: Next authentication method: publickey
debug1: Offering public key: (none) RSA SHA256:<myfingerprint> agent
debug1: Server accepts key: (none) RSA SHA256:<myfingerprint> agent
sign_and_send_pubkey: signing failed: agent refused operation
debug1: Trying private key: /home/zoickx/.ssh/id_rsa
debug1: Trying private key: /home/zoickx/.ssh/id_dsa
debug1: Trying private key: /home/zoickx/.ssh/id_ecdsa
debug1: Trying private key: /home/zoickx/.ssh/id_ed25519
debug1: Trying private key: /home/zoickx/.ssh/id_xmss
debug1: No more authentication methods to try.
<myremote>: Permission denied (publickey).
显然,服务器同意我的公钥已获得授权,但由于我不清楚的原因,服务器拒绝继续。
如果谷歌搜索“”,常见的答案sign_and_send_pubkey: signing failed
是用于ssh-add
添加丢失的私钥或更改密钥文件的权限。对于我使用 gpg-agent 的情况来说,这些似乎都没有帮助。我的密钥似乎确实可用于 ssh,并且没有可更改权限的文件。
我担心的有几件事:
- 我在任何时候都没有收到 gpg 的 pinentry 提示
- 公钥的形式是
ssh-rsa <key> (none)
,以奇怪的“none”而不是标准结尾user@host
。
有关我的设置的其他信息:
- GPG 2.2.15
- libgcrypt 1.8.4
- 输出
gpgconf
:
gpg:OpenPGP:/usr/bin/gpg
gpg-agent:Private Keys:/usr/bin/gpg-agent
scdaemon:Smartcards:/usr/lib/gnupg/scdaemon
gpgsm:S/MIME:/usr/bin/gpgsm
dirmngr:Network:/usr/bin/dirmngr
pinentry:Passphrase Entry:/usr/bin/pinentry
- gpg 按预期进行加密/解密,并且 pinentry 正常工作
- 未运行 Gnome 或任何其他桌面环境 - 使用 dwm
- 海马已安装
答案1
由于系统没有提示您输入 GPG 密码,因此问题或许正在运行的 gpg-agent 无法访问显示/终端。我在使用 GPG 版本 2.2.17 的 Mac OS 10.14 (Mojave) 上遇到了相同的症状。
我在 gpg-agent 的手册页中找到了解决方法:
注意:如果 gpg-agent 收到签名请求,可能需要提示用户输入密码,这是解密存储的密钥所必需的。由于 ssh-agent 协议不包含告诉代理在哪个显示/终端上运行的机制,因此 gpg-agent 的 ssh-support 将使用 gpg-agent 已启动的 TTY 或 X 显示。要将此显示切换到当前显示,可以使用以下命令:
gpg-connect-agent updatestartuptty /bye
虽然我还没有找到永久的解决方案,但这个命令对我有用。每次重启后都需要重复。