什么是 FIDO2 安全密钥?

FIDO2 是一个开放认证标准,旨在提供更安全的密码替代方案。在 SSH 认证场景中,FIDO2 安全密钥(如 YubiKey、Titan Security Key 等)可以存储私钥,实现硬件级别的私钥保护。

与传统 SSH 密钥相比,FIDO2 安全密钥具有以下优势:

  • 私钥永不离开硬件设备:即使计算机被攻破,攻击者也无法获取私钥
  • 需要物理按键:每次认证都需要用户触摸密钥确认,防止远程恶意使用
  • 支持 PIN 保护:可设置 PIN 码作为额外验证层
  • 支持常驻密钥:密钥可存储在设备上,在多台机器间共享使用

支持的密钥类型

OpenSSH 支持两种 FIDO2 密钥类型:

  • ecdsa-sk:基于 ECDSA 曲线的安全密钥
  • ed25519-sk:基于 Ed25519 的安全密钥(推荐)

生成 FIDO2 SSH 密钥

基本生成命令

1
ssh-keygen -t ed25519-sk -C "your-email@example.com"

生成过程中需要:

  1. 按提示触碰安全密钥的金属感应区
  2. 输入设备 PIN 码(如已设置)

常用生成选项

1. 创建常驻密钥(可在多台设备使用)

1
ssh-keygen -t ed25519-sk -O resident -C "resident-key@example.com"

常驻密钥存储在安全密钥内部,可通过 ssh-add -K 从其他机器加载。

2. 禁用触控要求(不推荐)

1
ssh-keygen -t ed25519-sk -O no-touch-required -C "no-touch@example.com"

⚠️ 警告:禁用触控会降低安全性,攻击者可能在用户不知情时使用密钥。

3. 要求 PIN 验证

1
ssh-keygen -t ed25519-sk -O verify-required -C "pin-required@example.com"

此选项要求每次签名时都进行 PIN 验证(而非仅首次)。

4. 指定应用字符串

1
ssh-keygen -t ed25519-sk -O application="ssh:my-server -C "app-specific@example.com"

加载常驻密钥

如果使用常驻密钥,在新设备上需要先加载:

1
ssh-add -K

查看已加载的密钥:

1
ssh-add -l

输出示例:

1
256 SHA256:xxxxx your-email@example.com (ED25519-SK)

配置 SSH 使用 FIDO2 密钥

1. 添加公钥到服务器

将公钥内容(~/.ssh/id_ed25519_sk.pub)添加到服务器的 ~/.ssh/authorized_keys 文件:

1
2
3
cat ~/.ssh/id_ed25519_sk.pub
# 复制输出内容到服务器
ssh user@server "echo 'ssh-ed25519-SKxxxxx your-email@example.com' >> ~/.ssh/authorized_keys"

2. 连接到服务器

1
ssh user@server

连接时会自动提示触碰安全密钥。

3. 指定密钥文件

1
ssh -i ~/.ssh/id_ed25519_sk user@server

高级配置

在 SSH 配置文件中使用

编辑 ~/.ssh/config

1
2
3
4
Host server1
    HostName 192.168.1.100
    User admin
    IdentityFile ~/.ssh/id_ed25519_sk

FIDO2 密钥与 SSH 证书

FIDO2 密钥也可以用于证书认证:

1
2
3
4
5
# 生成 CA 密钥
ssh-keygen -t ed25519 -f ~/.ssh/ca_key

# 使用 FIDO2 密钥签发用户证书
ssh-keygen -s ~/.ssh/ca_key -I "user-cert" -N "" -V "+52w" ~/.ssh/id_ed25519_sk.pub

故障排查

1. 设备未被识别

1
2
# 检查 libfido2 设备
ssh-add -l

如显示 Could not add a smartcard key,可能需要安装相关驱动。

2. PIN 码锁定

多次输入错误 PIN 会锁定设备。请查阅设备说明书执行恢复流程。

3. 权限问题

确保密钥文件权限正确:

1
2
3
chmod 700 ~/.ssh
chmod 600 ~/.ssh/id_ed25519_sk
chmod 644 ~/.ssh/id_ed25519_sk.pub

安全建议

  1. 启用 PIN 保护:为安全密钥设置 PIN 码
  2. 使用常驻密钥备份:将重要密钥设为常驻,防止密钥丢失
  3. 生成多个密钥:为不同用途生成独立密钥
  4. 妥善保管:安全密钥丢失意味着访问权限丢失

总结

FIDO2 安全密钥为 SSH 认证提供了企业级的安全保障。通过硬件级别的私钥保护和触控验证,即使计算机被入侵,攻击者也无法伪造你的身份。对于管理敏感服务器或需要高安全标准的场景,FIDO2 密钥是理想选择。


参考来源