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

问题描述 投票:0回答:10

我正在尝试使用 OpenSSH for Windows 使用私钥与 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

在 Linux 上,可以通过私钥文件上的简单 chmod 600 来修复此问题,但是 Windows 没有等效的方法。

这听起来应该很简单,但我完全无法找到任何合理的解决方案。有没有办法直接添加私钥而不通过文件,或者跳过此隐私检查?还是我完全错过了其他东西?

key openssh
10个回答
72
投票

您可以在 Windows 中使用

icacls
代替
chmod
来调整文件权限。要授予当前用户读取权限并删除其他所有内容(这将允许 openssh 工作),这很好用:

命令提示符:

icacls .\private.key /inheritance:r
icacls .\private.key /grant:r "%username%":"(R)"

在 PowerShell 中,您可以通过将命令包装在对

icacls
 的调用中来使 
cmd.exe

工作
icacls .\private.key /inheritance:r
start-process "icacls.exe" -ArgumentList '.\private.key /grant:r "$env:USERNAME":"(R)"'

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。

5
投票

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

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

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

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

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

enter image description here


5
投票

适用于 Windows 10 将密钥文件存储在 User 中 例如:C:\Users\MANNEM.ssh

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


4
投票

在 Windows 资源管理器中找到该文件,右键单击它,然后选择“属性”。导航到“安全”选项卡并单击“高级”。

将所有者更改为您,禁用继承并删除所有权限。然后授予自己“完全控制”并保存权限。现在 SSH 不会再抱怨文件权限太开放了。


3
投票

保存以下脚本并运行您需要重置权限的密钥。

这是基于上面答案中给出的命令

# ResetKeyPermssions.ps1 <keyfile>
# Resets windows permissions for private key file, such that ssh-add doesn't complain about permissions being too open

$path = $args[0]
#icacls.exe $path /reset #not required as :R replaces permissions
# replace all permissions, give full control to currently logged in user
icacls.exe $path /GRANT:R "$($env:USERNAME):(F)"
# Remove all inheritances
icacls.exe $path /inheritance:r

2
投票

我在 Windows 上遇到了同样的错误,但是将私钥文件移动到“C:\Users\Administrator.ssh”后,它工作正常


2
投票

如果我们仍在寻找 SSH 问题的解决方案:

  1. 转到您的私钥并添加计算机的根用户(确保您添加的是计算机的所有者)并提供完整的权限。
  2. 删除其他用户。

如果我们无法删除用户:

  1. 转到“属性”选项卡中的“安全”选项卡,然后单击“高级”
  2. 在下一个屏幕中,将有一个“禁用继承”按钮 - 单击该按钮。
  3. 它将打开一个弹出窗口并选择第一个选项(转换继承的权限..),然后尝试删除。

在我的问题中,我尝试连接 ec2.prem 文件,该文件是 AWS 的私钥,在执行上述步骤后,我能够解决它。


0
投票

我尝试更改权限,但没有成功。 对我有用的是将所有权更改为当前用户,因为密钥是由其他管理员用户创建的


0
投票

在 Windows 中,您可以按照以下步骤列表来删除您遇到的错误。

步骤:

1. Right click on the file and go to properties and select the security tab.

2. Then click on the advance button located the below right corner.

3. In new window of "Advance Security Settings For "Your File Name shown" click on the "Disable Inheritance" and remove all the Inheritance.

4. Click Apply and Ok and go delete the all users listing in the security tab window by click on the "Edit" button.

5. Once removed all users then click on "Add" button. Then type the username you using for you windows screen.

6. Allow the all permission for user name you added. and click on apply and ok.

7. Execute the same command again to login using the ssh then you will get  successfully login to system.

8. In case same problem occurs please follow the steps 1 to 7 again and try.
© www.soinside.com 2019 - 2024. All rights reserved.