我正在尝试使用 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 没有等效的方法。
这听起来应该很简单,但我完全无法找到任何合理的解决方案。有没有办法直接添加私钥而不通过文件,或者跳过此隐私检查?还是我完全错过了其他东西?
您可以在 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)"'
仅供参考:将“test.pem”重命名为您的原始 pem 文件名。
设置路径变量
$path = ".\test.pem"
重置以删除显式权限
icacls.exe $path /reset
给予当前用户明确的读取权限
icacls.exe $path /GRANT:R "$($env:USERNAME):(R)"
禁用继承并删除继承的权限
icacls.exe $path /inheritance:r
注:
在 Windows 资源管理器中找到该文件,右键单击它,然后选择“属性”。导航到“安全”选项卡并单击“高级”。
将所有者更改为您,禁用继承并删除所有权限。然后授予自己“完全控制”并保存权限。现在 SSH 不会再抱怨文件权限太开放了。
保存以下脚本并运行您需要重置权限的密钥。
这是基于上面答案中给出的命令
# 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
如果我们仍在寻找 SSH 问题的解决方案:
如果我们无法删除用户:
在我的问题中,我尝试连接 ec2.prem 文件,该文件是 AWS 的私钥,在执行上述步骤后,我能够解决它。
我尝试更改权限,但没有成功。 对我有用的是将所有权更改为当前用户,因为密钥是由其他管理员用户创建的
在 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.