在 macOS 上用 Touch ID 保护 SSH 密钥:三条命令,私钥无法被导出
来源:nmattia.com — 2026-10-19
📋 概述
作者 Nicolas Mattia 给出在 Mac 上配置 SSH 密钥的极简方案:三条命令即可把密钥放进 Secure Enclave,并用 Touch ID 保护,其中包括对 GitHub 的支持。相比传统的 ~/.ssh/id_ed25519 密钥文件,这套做法有三个直接好处:私钥材料无法被导出、从未被显示、也就无法被窃取;每次使用身份时都会弹出指纹确认;文件系统里不再散落公钥私钥文件,也就不存在误删风险。保护对一切 SSH 场景生效,包括 git over SSH。文章后半部分深入「幕后」:用 sc_auth create-ctk-identity 在 Secure Enclave 中创建 CryptoTokenKit 身份(p-256-ne 里的 ne 表示不可导出),用 ssh-add -K -S /usr/lib/ssh-keychain.dylib 让 SSH 通过 keychain 动态库与 Secure Enclave 通信,重启后需要重新提醒一次,用 ssh-add -L 取出以 sk-ecd 开头的公钥句柄注册到 GitHub。代价也很明确:Mac 坏了身份就随之消失,需要在各处重新创建并注册。
🔑 核心要点
- 三步流程:sc_auth create-ctk-identity -l ssh-key -k p-256-ne -t bio 建身份,ssh-add -K -S /usr/lib/ssh-keychain.dylib 让 SSH 认识它,ssh-add -L 取公钥注册到 GitHub
- 所谓「智能卡身份」其实就是存在 Secure Enclave 里的私钥:sc_ 代表 Smart Card,Apple 管它叫 CryptoTokenKit(CTK)身份,命名混乱但本质简单
- 私钥不可导出是核心安全属性:作者的说法是「你甚至无法自愿把它送人」,因为它根本出不了 Secure Enclave
- 代价是身份与硬件绑定:Mac 一坏,身份随之消失,必须重新创建并到 GitHub 等地方重新注册
- 文章对「为什么这样能工作」给了完整的心理模型:从身份创建、ssh-keychain.dylib 的桥接,到一次完整的 SSH 签名流程都有拆解
💡 金句
No one can steal your identity (well, you can't even give it away willingly since it can't be extracted from the Secure Enclave).
👍 0
👎 0
← 返回 Lobsters 首页