Windows 使用 KeePassXC 与 SSH Agent 管理 SSH 密钥
Windows 使用 KeePassXC 与 SSH Agent 管理 SSH 密钥
本文在 Windows 10/11 上使用系统 OpenSSH Agent,并把私钥作为附件保存在 KeePassXC 数据库中。解锁数据库后,KeePassXC 将密钥加载到 Agent;SSH 客户端无需直接读取裸私钥文件。
相关笔记:KeePassXC 推荐配置与使用指南、KeePass 密码管理、GitHub 提交邮箱隐私与 Git 多身份配置、Debian SSH 密钥登录排障与安全加固。
KeePassXC 不是 SSH Agent。它是 Windows OpenSSH Agent 或 Pageant 的客户端,负责在数据库解锁和锁定时添加、移除密钥。
最终结构
KeePassXC 数据库└─ SSH 条目 ├─ 密码字段:私钥 passphrase └─ 附件:OpenSSH 私钥 ↓ 数据库解锁时加载Windows OpenSSH Authentication Agent ↓ssh / Git ↓服务器 ~/.ssh/authorized_keys 中的对应公钥一、规划密钥
推荐每台电脑使用独立密钥:
家用电脑 → Key A工作电脑 → Key B笔记本 → Key C把各自的公钥添加到需要访问的服务器。某台设备丢失或停用时,只需删除对应公钥,不会影响其他设备。
多台电脑共用同一私钥虽然可行,但服务器无法区分设备,单机失陷后也不能只撤销这一台。KeePassXC 数据库可以同步,密钥身份仍应按设备拆分。
二、启用 Windows OpenSSH Agent
普通 PowerShell 检查组件:
ssh -VGet-Service ssh-agent若找不到 ssh,在 Windows 的 设置 → 应用 → 可选功能 中安装 OpenSSH 客户端。
以管理员身份打开 PowerShell:
Get-Service ssh-agent | Set-Service -StartupType AutomaticStart-Service ssh-agentGet-Service ssh-agent随后检查:
ssh-add -l出现 The agent has no identities. 表示 Agent 正常,只是尚未加载密钥。
三、生成 Ed25519 密钥
ssh-keygen -t ed25519 -C "device-name"默认会在当前用户的 .ssh 目录生成:
id_ed25519 私钥id_ed25519.pub 公钥为私钥设置强 passphrase。它用于解密私钥,与服务器账号密码完全不同。
服务器只接收公钥。私钥不可上传到服务器、公开仓库、聊天记录或普通云盘目录。
四、把私钥保存在 KeePassXC
新建条目,例如:
标题:SSH Key - device-name用户名:登录用户名或设备名密码:私钥 passphraseURL:ssh://server.example.com若私钥没有 passphrase,密码字段保持为空;不要填写服务器密码。
编辑条目,进入 高级 → 附件 → 添加,选择没有 .pub 后缀的私钥文件。使用附件后,私钥会保存在加密的 KDBX 中;选择“外部文件”则只保存路径引用,换电脑后仍需单独复制文件。
检查文件类型:
Get-Content "$env:USERPROFILE\.ssh\id_ed25519" -TotalCount 1OpenSSH 私钥开头应类似:
[OpenSSH 私钥头部标记]若看到 ssh-ed25519 AAAA...,说明选中的是公钥。
五、配置 KeePassXC SSH Agent 集成
进入 工具 → 设置 → SSH Agent:
☑ 启用 SSH Agent 集成☑ OpenSSH for Windows设置页应显示 Agent 连接正常。不要同时混用 Windows OpenSSH、Git for Windows 自带 Agent 和 Pageant。
再编辑 SSH 条目,进入 SSH Agent:
- 私钥来源选择刚添加的附件。
- 开启“数据库解锁时添加密钥”。
- 开启“数据库锁定时移除密钥”。
也可在条目右键菜单中手动把密钥添加到 SSH Agent。验证:
ssh-add -l正常时会显示密钥指纹和类型,例如 ED25519。
六、把公钥安装到服务器
读取公钥:
Get-Content "$env:USERPROFILE\.ssh\id_ed25519.pub"首次使用原有密码或云厂商控制台登录服务器,然后执行:
mkdir -p ~/.sshchmod 700 ~/.sshnano ~/.ssh/authorized_keyschmod 600 ~/.ssh/authorized_keys把完整公钥粘贴为一行。多台电脑的公钥各占一行:
ssh-ed25519 AAAA... home-pcssh-ed25519 BBBB... work-pc保留当前已登录的 SSH 会话,在另一个终端确认密钥登录成功后再退出。不要在首次测试前关闭密码登录。
七、测试登录
确认 Agent 已加载密钥:
ssh-add -lssh user@203.0.113.10 -p 2222如需查看认证过程:
ssh -v user@203.0.113.10 -p 2222成功时日志通常会包含:
Offering public keyServer accepts keyAuthenticated ... using "publickey"八、使用 SSH Config 简化命令
编辑当前用户 .ssh\config:
Host server-a HostName 203.0.113.10 User user Port 2222之后只需:
ssh server-a密钥较少时,OpenSSH 会从 Agent 中选择服务器接受的身份,无需设置 IdentityFile。
Agent 中密钥很多时
若出现 Too many authentication failures,为每台服务器精确指定公钥并限制身份:
Host server-a HostName 203.0.113.10 User user Port 2222 IdentityFile ~/.ssh/server-a_ed25519.pub IdentitiesOnly yes这里可以让 IdentityFile 指向对应公钥;私钥仍由 Agent 提供,不必以裸文件长期保存在 .ssh 目录。
九、常见故障
The agent has no identities.
依次检查:
ssh-agent服务是否为Running。- KeePassXC 是否启用了 OpenSSH for Windows 集成。
- 条目是否选择了正确的私钥附件。
- 数据库解锁时自动添加是否开启。
- 锁定再解锁数据库,或手动添加条目密钥。
KeePassXC 提示解密失败
密码字段必须填写私钥 passphrase,而不是服务器密码。可以验证私钥:
ssh-keygen -y -f "$env:USERPROFILE\.ssh\id_ed25519"输入正确 passphrase 后应输出对应公钥。
PowerShell 可用,Git Bash 不可用
检查实际调用的 SSH:
where.exe ssh优先统一使用:
C:\Windows\System32\OpenSSH\ssh.exeGit for Windows 的 MSYS2 Agent socket 不受 KeePassXC 支持。安装 Git 时选择 Windows OpenSSH,或配置 Git 使用系统 OpenSSH。
同步盘保存 KDBX 失败
若 OneDrive 等同步工具短暂占用文件:
- 不要立即关闭 KeePassXC。
- 等待同步完成后再次保存。
- 把 KDBX 设置为始终保留在本机。
- 检查窗口标题是否有
*,它表示仍有未保存修改。
同步不是备份。至少保留云端版本历史和一份独立离线备份。
十、安全收尾
连续验证以下场景后,才考虑关闭服务器密码认证:
- KeePassXC 重启后可以加载密钥。
- 数据库锁定后密钥从 Agent 移除,解锁后重新加入。
- Windows 重启后
ssh-agent自动运行。 - 新终端可以稳定完成公钥登录。
- 云厂商控制台或其他应急入口可用。
本地裸私钥确认已进入 KDBX 且有可靠备份后,可按自己的恢复策略安全删除;公钥和 SSH Config 可以保留。
验收清单
- Windows OpenSSH 客户端可用。
-
ssh-agent自动启动且状态为 Running。 - KeePassXC 已连接 OpenSSH for Windows。
- 私钥附件与 passphrase 配置正确。
-
ssh-add -l能看到预期指纹。 - 服务器
authorized_keys只包含需要保留的公钥。 -
ssh -v确认使用 publickey 认证。 - KDBX 有版本历史与独立备份。
参考资料
文章分享
如果这篇文章对你有帮助,欢迎分享给更多人!














