在Windows上使用私钥的OpenSSH(“未受保护的私钥文件”错误)

Exc*_*dos 6 openssh key

我正在尝试使用私钥使用Windows版OpenSSH与SSH服务器进行简单连接,并且遇到了以下问题:

@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@         WARNING: UNPROTECTED PRIVATE KEY FILE!          @
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
Permissions for 'private' are too open.
It is required that your private key files are NOT accessible by others.
This private key will be ignored.
Load key "private": bad permissions
Run Code Online (Sandbox Code Playgroud)

在Linux上,使用私钥文件上的简单chmod 600可以解决此问题,但是Windows没有等效的方法。

这听起来应该很容易,但是我完全无法找到任何合理的解决方案。是否可以直接添加私钥而不通过文件,也可以跳过此隐私检查?还是我很想念其他东西?

小智 21

仅供参考:将“test.pem”重命名为原始 pem 文件名。

  1. 设置路径变量

    $path = ".\test.pem"

  2. 重置以删除显式权限

    icacls.exe $path /reset

  3. 给予当前用户明确的读取权限

    icacls.exe $path /GRANT:R "$($env:USERNAME):(R)"

  4. 禁用继承并删除继承的权限

    icacls.exe $path /inheritance:r

笔记:

  • 您可以根据您的文件名替换文件名。在本例中为 test.pem。
  • 您必须位于文件所在的同一目录中。
  • 您必须以管理员身份打开 power shell。


Exc*_*dos 11

您可以在Windows中使用icacls而不是chmod来调整文件权限。要授予当前用户读取权限并删除其他所有内容(这将允许openssh正常工作),这可以很好地工作:

icacls .\private.key /inheritance:r
icacls .\private.key /grant:r "%username%":"(R)"
Run Code Online (Sandbox Code Playgroud)

  • 是的,抱歉,我应该把它放进去。`$env:USERNAME` 是正确的(尽管大小写实际上并不重要)。尽管如此,该命令仍然不起作用,因为 PowerShell 不喜欢 cmd.exe 样式参数,因此您必须将整个内容包装在对 cmd.exe 的调用中。我提到了所有这些,因为 PowerShell 现在是 W10 的默认命令外壳。 (2认同)
  • icacls 确实在 powershell 上似乎有点损坏。经过一段时间的试验、错误和谷歌搜索,似乎将它包装在对 cmd.exe 的调用中是正确的方法。start-process 'icacls.exe' -ArgumentList '.\test /grant:r "$env:username":"(R)"' 应该可以工作 (2认同)
  • 对我不起作用,运行上述命令后文件为0444,因此仍然可以读取。 (2认同)

小智 5

我在 Windows 10 上进行了此操作,它解决了问题,正如您在图片中看到的那样。

您应该将文件的所有者(包含私钥)更改为具有完全访问权限的用户名。然后删除有权访问该文件的其他用户名。

  1. 右键单击包含私钥的文件,然后单击“属性”,然后单击“安全”选项卡>“高级”,通过单击更改按钮,您可以将所有者更改为您的用户名。(如果您不知道用户名,请在命令提示符中运行:“ echo %USERNAME% ”。)更改>高级...>立即查找

  2. 删除除您刚刚添加的权限条目之外的所有权限条目

单击“禁用继承”>“转换继承的权限...”,然后删除除刚刚添加的权限条目之外的所有权限条目。

在此输入图像描述


小智 5

对于 Windows 10,将密钥文件存储在用户 Ex:C:\Users\MANNEM.ssh 中

确保私钥文件的权限如图所示 权限

权限