iVampireSP 的物语

与所有美好的存在又多了一年的物语

在 macOS 和 Windows 下从 FIDO 设备导入密钥

macOS

macOS 下使用以下命令来添加。

killall ssh-agent
eval $(ssh-agent)
ssh-add -K

# 如果不行,则应该使用 Homebrew 版本的 OpenSSH
brew install libfido2 openssh
# 然后执行
/opt/homebrew/bin/ssh-keygen -K

# 推荐加入这个
echo 'export PATH="/opt/homebrew/opt/openssh/bin:$PATH"' >> ~/.zshrc

# 如果上面的还是不行的话
# 推荐把这个加入到 .zshrc
# 启动 ssh-agent(如果还没启动)
if [ -z "$SSH_AUTH_SOCK" ]; then
    eval "$(ssh-agent -s)"
fi

# 然后关闭终端重新打开

# 然后到 ~/.ssh 中
cd ~/.ssh
# 再次导入
ssh-keygen -K

# 验证一下 
ssh-add -l

Windows

注意:如果你是 Windows 11 24H2,可以直接下面的更新步骤,直接进入导入过程。

Windows 自带的 SSH 版本可能有点低。可以到这里下载新版本的 OpenSSH 来替换系统自带的 SSH。

https://github.com/PowerShell/Win32-OpenSSH/releases

然后使用这个命令来导入 Yubikey 中的 ED25519-SK 密钥。此命令需要在 管理员模式 下运行。

# 保存到内存中
ssh-add.exe -K -S internal
# 保存到文件
ssh-keygen -K

我之前尝试的是这个命令:ssh-add.exe -K -S ed25519-sk。但是发现它压根没有和密钥通信,输入完 PIN 后直接抛出了 Unable to load resident keys: invalid format 错误。如果出现密钥闪烁但还是这个情况,说明你肯定是密码错的太多,重新插拔密钥再次输入即可。

后来看了这个 Issue 才解决的问题。

ssh-add -K(不带 -S)想从所有已知 provider 加载 resident key,但 Windows 自带 OpenSSH 没有默认 provider 配置,所以报
Cannot download keys without provider。这条命令只是把 key 加进 ssh-agent
内存里,不会写文件,重启就没了。要持久化必须用 ssh-keygen -K 导出文件。

Windows 下的补充命令。

start-ssh-agent.cmd
Get-Service ssh-agent | Set-Service -StartupType Automatic -PassThru | Start-Service

生成 SK

ssh-keygen -t ed25519-sk -O resident -O application=ssh:YourTextHere -O verify-required

无需 Touch

https://wiki.archlinux.org/title/SSH_keys#:~:text=Additionally%2C,authorized_keys

ssh-keygen -t ed25519-sk -O resident -O application=ssh:YourTextHere -O no-touch-required

写入到 authorized_keys 时需注意

no-touch-required sk-ssh-ed25519@openssh.com AAAAInN... user@example.com

2 条回复

  1. 羡慕有Yubikey的,我连Canokey都玩不起

  2. AICCrop 的头像
    AICCrop

    可以的,羡慕有yubikey

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注