SSH 服务器接受密钥,但签名失败

SSH 服务器接受密钥,但签名失败

我最近尝试从标准 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

虽然我还没有找到永久的解决方案,但这个命令对我有用。每次重启后都需要重复。

相关内容