SecuritySSHFIDO2U2FmacOSGit
笔记本电脑早已内置安全令牌——如何配置 macOS Secure Enclave 替代 YubiKey
收录于 2026/5/17 22:34:06
安全令牌的承诺
YubiKey 等安全令牌的核心承诺:私钥永不出设备。只能发送数据到设备上由私钥签名,且操作需物理交互(如触摸按钮或指纹验证)。这比 ~/.ssh 目录中的私钥文件安全得多——远程攻击者无法仅通过网络获取安全令牌的签名。
缺点:
- 用户可能被训练成「只要闪就按」,遭遇恶意请求
- 丢失即永久失去私钥(需购买至少两个令牌做备份)
- 加密货币的 BIP 39 助记词是备份私钥的最后手段
使用场景
1. SSH 认证 使用 FIDO/U2F 生成安全密钥:
# 安装 libfido2 后运行 ssh-keygen -t ed25519-sk
这会生成一对文件,但「私钥」文件只是指向安全令牌上真实私钥的句柄,可以安全公开。
2. Git 操作
# 配置 Git 使用 SSH 密钥签名 git config --global commit.gpgsign true
注意:rebase 时需要重新签名每个提交,指纹读取失败率过高可能是问题。
3. Linux PAM(密码less 登录 & sudo)
macOS Secure Enclave 配置
使用 Arian van Putten 的方法在 M1 MacBook Air 上配置:
# 创建 CTK 身份 sc_auth create-ctk-identity -l ssh -k p-256-ne -t bio # 生成密钥对(使用 macOS keychain) ssh-keygen -w /usr/lib/ssh-keychain.dylib -K -N ""
生成的 id_ecdsa_sk_rk 文件就是可以安全公开的「私钥」。
添加到远程服务器:
ssh-copy-id -i ~/.ssh/id_ecdsa_sk_rk.pub <server>
配置 ~/.ssh/config:
Host *
IdentityFile ~/.ssh/id_ecdsa_sk_rk
SecurityKeyProvider=/usr/lib/ssh-keychain.dylib
SSH 登录时会自动弹出 macOS 指纹/密码验证。
Git 签名配置
直接使用文件路径不行,需通过 ssh-agent:
# 添加密钥到 ssh-agent ssh-add -K -S /usr/lib/ssh-keychain.dylib
在 ~/.gitconfig 中:
[user] name = Your Name signingKey = "key::[email protected] AAAAI..."
Windows Hello 也支持
winget install Microsoft.OpenSSH.preview ssh-keygen -t ecdsa-sk
SSH 时使用 Windows Hello 进行人脸/指纹/PIN 验证。
结论
现代设备的 Secure Enclave 已足够强大,可以替代物理 YubiKey 进行日常开发工作,同时避免 USB 设备损坏端口的风险。