安全钥匙(FIDO)
FIDO 密钥是一种私钥留在硬件安全钥匙(USB 或 NFC 令牌)里的 SSH 密钥。私钥从不以软件形式存在,既不在你的设备上,也不在钥匙串里。每次连接都由钥匙硬件在你实体触碰之后完成签名。
- 一把支持 USB 或 NFC 的 FIDO2 安全钥匙。
- 服务器运行 OpenSSH 8.2 或更高版本(
sk-类密钥自该版本引入)。
安全钥匙只能在 SigilTTY 内新建,无法导入在别处用 ssh-keygen -t ecdsa-sk 生成的密钥对——那些密钥绑定的是另一个应用身份,拿到这里也签不了名。
在密钥库中选择创建 FIDO 密钥,然后设置:
- 名称——这把密钥在密钥库和服务器配置选择器中的显示名。
- 存入安全钥匙(驻留)——可选。驻留凭据本体存进令牌,而不是仅在钥匙串里留一个句柄。
- 要求 PIN——除触碰之外,再向安全钥匙索要 PIN 码。
随后 Mac 或 iPhone 会弹出系统的安全钥匙面板。插入或贴近钥匙,触碰它,如果设了 PIN 就再输入 PIN。
把公钥添加到服务器
Section titled “把公钥添加到服务器”在密钥库中复制公钥,像添加其他公钥一样追加到服务器的 ~/.ssh/authorized_keys。它是一行标准的 OpenSSH 公钥:
sk-ecdsa-sha2-nistp256@openssh.com AAAA… name@SigilTTY开启要求 PIN 后,复制出来的行会带上 verify-required 选项,它让服务器拒绝任何未经 PIN 确认的签名:
verify-required sk-ecdsa-sha2-nistp256@openssh.com AAAA… name@SigilTTY「要求 PIN」之后仍可在密钥的编辑面板里随时开关,但改完要重新复制公钥并更新服务器,否则服务器仍按旧设置执行。
连接时是什么体验
Section titled “连接时是什么体验”签名按连接逐条发生,无法缓存——以下每一项都需要触碰一次:
- 打开一个终端会话;此后每次重连再触碰一次。
- 打开 SFTP 文件浏览器;首次传输文件时再触碰一次(传输走自己的连接)。
- 打开隧道会话。
- 跳板机链路上的每一跳(若该跳使用这把密钥)。
- Mac 上批量连接时的每一台服务器——系统面板会逐个弹出。
取消系统面板等同于认证失败:会话会挂起等待,且不会自行重试。
不支持的场景
Section titled “不支持的场景”FIDO 密钥特意不参与以下几处:
- 密钥接力(Key Handoff)——没有可交付的私钥。请在另一台设备上使用同一把安全钥匙,或再登记一把。
- 代理转发——FIDO 密钥不会作为可转发身份提供给远程主机。
- **生物识别保护**与密码短语——触碰本身已是持有证明,因此这些选项对 FIDO 密钥隐藏。
- 导入既有的
*-sk密钥文件,以及把密钥导出到 SigilTTY 之外。
凭据句柄像其他凭据一样存放在钥匙串里,因此启用凭据同步后会随 iCloud 钥匙串传输——但单凭句柄签不了任何东西。你从哪台设备连接,那把安全钥匙就得在哪台设备上在场。详见 iCloud 同步。
安全钥匙的各类报错,请参见身份验证失败。