在 Windows 7 家庭高级版中,将私钥保存在 C 盘根目录的 PuTTY 密钥生成器(又名 Puttygen)中后,它在 Explorer 中不可见。
如何重现:
- 启动 Puttygen。
- 生成密钥。
- 单击“保存私钥”(这也适用于“保存公钥”,但我只用它测试了原始情况)。
- 导航
C:
。 - 输入名称,例如
id_rsa
,将文件另存为C:\id_rsa.ppk
。 - 启动 Explorer。
- 导航
C:
。
结果:没有id_rsa.ppk
可见。
为了证明该文件存在:
- 回到Puttygen。
- 再次点击“保存私钥”按钮。
- 导航
C:
。
在此窗口中,您可以与文件进行交互。我从那里检查了文件属性:
- 它没有被隐藏。
- 已为我的用户选中“完全控制”。
- “打开方式”奇怪地显示为“Windows Shell Common Dll”。
附加信息:
- 我昨天安装了 Windows,因此它不是什么受索尼影响的怪物。
- 它拥有所有最新的安全更新和.NET 4.0。
- 我做已经安装了 TortoiseGit 和 7zip 集成,因此可以想象它们与此有关(尽管 .ppk 文件不应该与它们中的任何一个相关)。
事情做过使文件显示在资源管理器中:
- 将文件保存在另一个目录中,然后使用 Explorer 将其复制/移动(均有效)到
C:\
。我确实收到了“目标文件夹访问被拒绝”请求,我必须先单击“继续”。 - 将文件保存在另一个目录中并导航到那里。
- 将文件保存在另一个磁盘的根目录(
D:
在本例中)并导航到那里。
事情失败的使文件显示在资源管理器中(F5每次操作后点击资源管理器窗口中的刷新):
- 将文件重命名为
foo.ppk
。 - 以不同的名称保存了第二份副本。
- 打开“显示隐藏文件、文件夹和驱动器”。
- 关闭“隐藏受保护的操作系统文件”。
- 将文件保存在另一个目录中,然后将其复制到
C:\
在 Puttygen 保存对话框中。 我曾是不是要求授予保存文件的权限,就像在 Explorer 中一样。
我天真的假设是 Explorer 有一些针对“受限”(实际上并非受限,因为 Puttygen 会忽略它)目录的内置特殊情况,仅通过“目标文件夹访问被拒绝”对话框更新文件列表。实际原因是什么?
答案1
在 Vista 和更新版本的 Windows 中,非特权进程不允许保存到“用户”没有写入权限的文件夹(即使您是本地管理员并且管理员组有访问权限)。因此,当非特权程序尝试在那里写入文件时,它实际上会保存在 中%localappdata%\VirtualStore
。
答案2
好吧,我见过同样的行为,文件确实在 VirtualStore 中,但我觉得有趣的是,如果我加载 bash shell(我安装了 cygwin),它会像我认为的那样将文件显示在 Program Files\putty 中,而不是像 windows cmd shell 那样奇怪地不可见。因此,如果您有 cygwin,您可以通过这种方式查看您的关键文件,而不必遍历整个文件系统。