我有一个 Yubikey(Yubico 的安全密钥 NFC),我正尝试在 Linux 机器上设置它,以在可发现密钥模式下进行 SSH 身份验证。我已关注本教程并使用
ssh-keygen -t ecdsa-sk -O resident -O application=ssh:YourTextHere -O verify-required
之后,公钥被复制到目标服务器,我可以正确登录
ssh -i /root/.ssh/YourTextHere server
但是,当我尝试在代理上连接加载密钥而不使用证书时,出现以下错误:
sign_and_send_pubkey: signing failed for ECDSA-SK "" from agent: agent refused operation
root@opnsense: Permission denied (publickey).
我使用以下方式加载 ssh-agent
eval "$(ssh-agent -s)"
并使用以下方式添加 Yubikey 的密钥
ssh-add -K
我可以正确地看到加载的密钥
ssh-add -L
这一切都指出了代理的签名问题,但我不确定如何继续。我已经在目标服务器中启用了所有签名算法。
我正在尝试从 Debian 12、openssh 版本 OpenSSH_9.2p1 进行连接。目标机器是 freebsd(opnsense 防火墙),openssh 版本 OpenSSH_9.3p2 我遗漏了什么吗?
编辑:找到解决方案,请参阅@Ramhound 的回复。我不得不做一个
apt-get install ssh-askpass
然后
which ssh-askpass
将显示二进制文件的路径。之后我只需要执行
eval "$(ssh-agent -s; SSH_ASKPASS=/usr/bin/ssh-askpass)"
并提示您输入密码和状态。连接成功后。
答案1
verify-required
需要一种方法ssh-agent
实际提示验证(无论是“触摸”请求还是 PIN 输入提示)。代理协议不包含任何将提示转发回调用程序的方法,因此ssh-agent
需要直接启动ssh-askpass
提示器。
确保ssh-askpass
安装了某个版本(我认为,不同的桌面有几个版本),如果需要,请设置SSH_ASKPASS=
其路径以便ssh-agent
可以找到它。
答案2
将其添加到您的~/.profile
文件中:
if [ -S "$HOME/.gnupg/S.gpg-agent.ssh" ] ; then
SSH_AUTH_SOCK="$HOME/.gnupg/S.gpg-agent.ssh"
export SSH_AUTH_SOCK
export GPG_TTY=$(tty)
gpg-connect-agent updatestartuptty /bye
fi