OpenSSH 在 Windows 上使用私钥("Unprotected private key file" 错误)

OpenSSH using private key on Windows ("Unprotected private key file" error)

我正在尝试使用 OpenSSH 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 没有等效的方法。

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

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

命令提示符:

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

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

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

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

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

如果我们无法删除用户:

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

在我的问题中,我试图将 ec2.prem 文件连接到 AWS,在执行上述步骤后,我能够解决它。

您在 Windows 资源管理器中找到该文件,right-click 在其上,然后 select“属性”。导航到“安全”选项卡并单击“高级”。

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

我是在 Windows 10 上完成的,它也解决了问题,正如您在图片中看到的那样。

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

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

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

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

enter image description here

对于windows 10 将密钥文件存储在用户中 例如:C:\Users\MANNEM.ssh

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

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

仅供参考:将“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.
  • 您必须位于文件所在的同一目录中。
  • 您必须以管理员身份打开电源 shell。

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