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

发表回复