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 问题的解决方案:
- 转到您的私钥并添加计算机的根用户(确保您添加的是计算机的所有者)并提供完整权限。
- 删除其他用户。
如果我们无法删除用户:
- 转到“属性”选项卡中的“安全”选项卡,然后单击“高级”
- 在下一个屏幕中将有一个禁用继承按钮 - 单击该按钮。
- 它将打开一个弹出窗口和 select 第一个选项(转换继承的权限..),然后尝试删除。
在我的问题中,我试图将 ec2.prem 文件连接到 AWS,在执行上述步骤后,我能够解决它。
您在 Windows 资源管理器中找到该文件,right-click 在其上,然后 select“属性”。导航到“安全”选项卡并单击“高级”。
将所有者更改为您,禁用继承并删除所有权限。然后授予自己“完全控制”并保存权限。现在SSH不会再抱怨文件权限太开放了。
我是在 Windows 10 上完成的,它也解决了问题,正如您在图片中看到的那样。
您应该将文件(包含私钥)的所有者更改为具有完全访问权限的用户名。
然后删除有权访问该文件的其他用户名。
右键单击包含私钥的文件并单击属性,然后单击安全选项卡 > 高级
通过单击 更改 按钮,您可以将所有者更改为您的用户名。
(如果您不知道用户名 运行:命令提示符中的“echo %USERNAME%”。)
更改>高级...>立即查找
删除除刚刚添加的权限条目之外的所有权限条目
单击“禁用继承”>“转换继承的权限...”
然后删除除刚刚添加的权限条目之外的所有权限条目。
enter image description here
对于windows 10
将密钥文件存储在用户中
例如:C:\Users\MANNEM.ssh
确保私钥文件的权限如图所示
我在 windows 上有同样的错误,但在将私钥文件移动到“C:\Users\Administrator.ssh”后它工作正常
仅供参考:将“test.pem”重命名为您的原始 pem 文件名。
设置路径变量
$path = ".\test.pem"
重置以删除显式权限
icacls.exe $path /reset
明确授予当前用户读取权限
icacls.exe $path /GRANT:R "$($env:USERNAME):(R)"
禁用继承并删除继承的权限
icacls.exe $path /inheritance:r
注:
- 您可以根据您的文件名替换文件名。在本例中为 test.pem.
- 您必须位于文件所在的同一目录中。
- 您必须以管理员身份打开电源 shell。
我尝试更改权限,但没有成功。
对我有用的是将所有权更改为当前用户,因为密钥是由其他管理员用户创建的
我正在尝试使用 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 问题的解决方案:
- 转到您的私钥并添加计算机的根用户(确保您添加的是计算机的所有者)并提供完整权限。
- 删除其他用户。
如果我们无法删除用户:
- 转到“属性”选项卡中的“安全”选项卡,然后单击“高级”
- 在下一个屏幕中将有一个禁用继承按钮 - 单击该按钮。
- 它将打开一个弹出窗口和 select 第一个选项(转换继承的权限..),然后尝试删除。
在我的问题中,我试图将 ec2.prem 文件连接到 AWS,在执行上述步骤后,我能够解决它。
您在 Windows 资源管理器中找到该文件,right-click 在其上,然后 select“属性”。导航到“安全”选项卡并单击“高级”。
将所有者更改为您,禁用继承并删除所有权限。然后授予自己“完全控制”并保存权限。现在SSH不会再抱怨文件权限太开放了。
我是在 Windows 10 上完成的,它也解决了问题,正如您在图片中看到的那样。
您应该将文件(包含私钥)的所有者更改为具有完全访问权限的用户名。 然后删除有权访问该文件的其他用户名。
右键单击包含私钥的文件并单击属性,然后单击安全选项卡 > 高级 通过单击 更改 按钮,您可以将所有者更改为您的用户名。 (如果您不知道用户名 运行:命令提示符中的“echo %USERNAME%”。) 更改>高级...>立即查找
删除除刚刚添加的权限条目之外的所有权限条目
单击“禁用继承”>“转换继承的权限...” 然后删除除刚刚添加的权限条目之外的所有权限条目。
enter image description here
对于windows 10 将密钥文件存储在用户中 例如:C:\Users\MANNEM.ssh
确保私钥文件的权限如图所示
我在 windows 上有同样的错误,但在将私钥文件移动到“C:\Users\Administrator.ssh”后它工作正常
仅供参考:将“test.pem”重命名为您的原始 pem 文件名。
设置路径变量
$path = ".\test.pem"
重置以删除显式权限
icacls.exe $path /reset
明确授予当前用户读取权限
icacls.exe $path /GRANT:R "$($env:USERNAME):(R)"
禁用继承并删除继承的权限
icacls.exe $path /inheritance:r
注:
- 您可以根据您的文件名替换文件名。在本例中为 test.pem.
- 您必须位于文件所在的同一目录中。
- 您必须以管理员身份打开电源 shell。
我尝试更改权限,但没有成功。 对我有用的是将所有权更改为当前用户,因为密钥是由其他管理员用户创建的