Linux下VS Code使用FIDO2安全密钥(YubiKey) SSH认证不提示PIN码
解决VS Code远程SSH无法识别FIDO2 ed25519_sk密钥的问题
以下是经过验证的排查和解决步骤:
1. 修正SSH配置文件
确保~/.ssh/config中明确指定FIDO2密钥并添加强制使用该密钥的配置,避免SSH自动跳过:
Host your-server-alias HostName <server-ip/domain> User <your-username> IdentityFile ~/.ssh/id_ed25519_sk IdentitiesOnly yes
IdentitiesOnly yes是核心配置,它会阻止SSH尝试其他可用密钥,强制使用你指定的FIDO2密钥。
2. 验证本地SSH基础功能
先脱离VS Code,在系统原生终端执行命令测试FIDO2密钥是否正常工作:
ssh -i ~/.ssh/id_ed25519_sk <your-username>@<server-ip>
如果这里也无法触发PIN/触摸验证,说明问题出在本地SSH环境:
- 检查OpenSSH版本:必须是8.2及以上版本才支持ed25519_sk,执行
ssh -V确认。 - 确认FIDO2设备连接正常,且密钥生成时的参数(如
-O verify-required)与设备能力匹配。
3. 调整VS Code远程SSH设置
- 关闭
remote.SSH.useLocalServer:该选项会让VS Code使用内置SSH服务,可能无法兼容FIDO2密钥。在VS Code设置中搜索并禁用此选项,重启VS Code后重试。 - 指定系统SSH路径:在VS Code设置中找到
remote.SSH.path,设置为系统原生SSH的路径:- Linux/macOS:
/usr/bin/ssh - Windows:
C:\Windows\System32\OpenSSH\ssh.exe
这确保VS Code调用的是支持FIDO2的系统SSH客户端。
- Linux/macOS:
4. 修复集成终端问题
如果系统终端正常但VS Code集成终端不行:
- 直接在集成终端中指定系统SSH路径执行命令,绕过终端环境可能的问题:
/usr/bin/ssh -i ~/.ssh/id_ed25519_sk <your-username>@<server-ip> - 检查集成终端的环境变量是否继承了系统的硬件设备权限,部分情况下VS Code的 sandbox 模式会限制对FIDO2设备的访问,可以尝试关闭VS Code的 sandbox 选项(需谨慎操作)。
5. 检查远程服务器配置
确认远程服务器的sshd_config中已开启公钥认证:
- 确保
PubkeyAuthentication yes未被注释 - 确认
AuthorizedKeysFile路径正确,且你的FIDO2公钥已添加到远程用户的~/.ssh/authorized_keys文件中
内容的提问来源于stack exchange,提问作者coforums
相关产品推荐
相关产品推荐

