使用Yubikey建立SSH连接时不显示Confirm user presence for key提示
问题环境
- 操作系统:Ubuntu 20.04.4 LTS
- 软件版本:OpenSSH 8.2p1、Git 2.28.0,已额外测试OpenSSH 9.0p1客户端复现问题
- 硬件:Yubikey 5 Nano,已完成用户PIN、管理员PIN配置
操作与配置
通过FIDO2协议在Yubikey上创建ed25519-sk类型SSH密钥,执行命令如下:
ssh-keygen -t ed25519-sk -f ~/.ssh/id_ed25519-sk
当前使用系统默认ssh-agent,可在Gnome「密码与密钥」应用的「OpenSSH密钥」分类下查询到该密钥。通过OpenSSH 9.0p1源码编译的ssh-keygen验证,公钥sk_flags为0x01(要求用户在场验证),按逻辑应触发密钥触摸提示。
异常现象
使用该密钥建立SSH连接、执行git clone/git pull等Git操作时,不会出现官方文档标注的Confirm user presence for key ...触摸提示,程序会静默等待用户操作,无法区分当前是等待网络/代理响应,还是等待触摸Yubikey:
- 开启SSH客户端verbose模式时,输出以下日志后Yubikey开始闪烁,触摸密钥后即可认证成功:
debug1: Authentications that can continue: publickey debug1: Next authentication method: publickey debug1: Offering public key: /.../.ssh/id_ed25519-sk ED25519-SK SHA256:... explicit authenticator agent debug1: Server accepts key: /.../.ssh/id_ed25519-sk ED25519-SK SHA256:... explicit authenticator agent debug1: Authentication succeeded (publickey). Authenticated to github.com (via proxy).
- 等待密钥触摸时的进程树如下,触摸完成后
ssh-sk-helper进程自动退出:
gnome-keyring-d(57868)-+-ssh-agent(58517)---ssh-sk-helper(79174) |-{gnome-keyring-d}(57869) |-{gnome-keyring-d}(57870) |-{gnome-keyring-d}(57982) `-{gnome-keyring-d}(79173)
初步排查
- 更换OpenSSH 9.0p1版本客户端测试,异常现象完全一致,排除客户端版本问题;
- 查阅源码确认:
sshconnect2.c中identity_sign()调用ssh_agent_sign()后返回,ssh-agent.c中process_sign_request2()包含sk密钥输出用户在场提示的逻辑; - 初步判断即使ssh-agent生成了提示,该提示也未传递到ssh进程,导致提示缺失。
根因说明
Ubuntu 20.04默认启动的ssh-agent是Gnome Keyring内置的ssh-agent实现,并非OpenSSH官方原生的ssh-agent。Gnome Keyring的ssh-agent没有实现FIDO2/sk类型密钥的用户在场提示透传逻辑,即使底层调用ssh-sk-helper触发了硬件等待状态,也不会把提示信息输出到前端SSH/Git进程的终端,最终表现为无提示静默等待。
修复方案
禁用Gnome Keyring的ssh-agent组件,改用OpenSSH原生ssh-agent即可恢复触摸提示:
- 编辑用户自启动配置,屏蔽Gnome Keyring的ssh-agent自启动项:
mkdir -p ~/.config/autostart/ cp /etc/xdg/autostart/gnome-keyring-ssh.desktop ~/.config/autostart/ echo "Hidden=true" >> ~/.config/autostart/gnome-keyring-ssh.desktop
- 在当前使用的shell配置文件(如
~/.bashrc、~/.zshrc)末尾添加配置,指定会话使用原生ssh-agent:
unset SSH_AUTH_SOCK eval $(ssh-agent)
- 注销后重新登录桌面会话,将sk密钥重新添加到ssh-agent后测试,即可正常看到
Confirm user presence for key ...触摸提示。
内容的提问来源于stack exchange,提问作者Vlad
相关产品推荐
相关产品推荐

