获得 Windows10 Pro 附加功能“OpenSSH-Client”,其中包括 ssh-agent 功能。可以使用 ssh-add 将密钥添加到代理。令我惊讶的是,这个 Windows 实现似乎将这些私钥存储在磁盘上 - 标准 ssh-agent 只会将它们存储在 RAM 中。 试试这个:
ssh-add <private key from thumbdrive>
## remove thumbdrive
## stop ssh-agent service
## start ssh-agent service
ssh-add -l
而且,瞧,钥匙还在那里;即使重新启动也不会擦除它们!
所以现在我真正非常安全的私钥位于系统磁盘上的某个位置。 我怎样才能删除它们以及磁盘上可能仍然存在的任何残留物? 有谁知道这些东西存放在哪里吗?
顺便说一句。就我个人而言,我发现这是对原始 OpenSSH ssh-agent 的一个糟糕的功能扩展
好的,回答我自己的问题:
短芒瑟:
ssh-add -D
将删除键....有点。
密钥存储在注册表中 HKCU\Software\OpenSSH\Agent\Keys 下。
从文件contrib/win32/win32compat/ssh-agent/keyagent-request.c
中的https://github.com/PowerShell/openssh-portable/releases/tag/v8.1.0.0的源代码中找出了这一点
从好的方面来说,此实现在存储密钥的私有部分上使用 DPAPI。 另一方面,如果拥有正确的权限,可以使用 ImpersonateLoggedOnUser 来解密此存储的密钥。
遗憾的是,这个实现并没有使用原始版本中严格的删除方法(
BN_clear_free
)——一个简单的RegDeleteTreeA
就足够了。因此,要真正删除,需要修改 ntuser.dat.log。
磁盘上私钥的实际存储不符合原始手册页:
The agent initially does not have any private keys.
总体来说:虽然叫法一样,但其实是很不一样的东西。关于使用此 ssh-agent 实现的一些警告:
Windows OpenSSH ssh-agent 服务默认将私钥存储在
%LOCALAPPDATA%\ssh
目录中。此位置通常是 C:\Users\YourUsername\AppData\Local\ssh.
在此目录中,您将找到 ssh-agent 文件夹,其中包含私钥。这些密钥使用您的用户帐户的凭据进行加密和保护。
需要注意的是,除非拥有适当的权限,否则其他用户或进程无法直接访问这些密钥。始终确保采取适当的安全措施来保护私钥等敏感信息
另外:
当您使用 ssh-add 将 SSH 密钥添加到 SSH 代理时,密钥通常存储在 内存 中,而不是磁盘上。它们缓存在 SSH 代理进程中,并且不会写入文件系统上的任何特定存储位置。