Windows SSH:“私钥”的权限太开放

Windows SSH:“私钥”的权限太开放

为了测试目的,我在 Windows 7 中安装了 OpenSSH 7.6。在我尝试从此 Windows 访问我的一个 AWS EC2 盒之前,SSH 客户端和服务器工作正常。

看来我需要更改私钥文件的权限。这可以在 unix/linux 上使用chmod命令轻松完成。

那么窗户怎么样?

private-key.ppm 是直接从 AWS 复制的,我猜测权限也是如此。

C:\>ssh -V
OpenSSH_7.6p1, LibreSSL 2.5.3

C:\>ver

Microsoft Windows [Version 6.1.7601]

C:\>


C:\>ssh [email protected] -i private-key.ppk
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@         WARNING: UNPROTECTED PRIVATE KEY FILE!          @
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
Permissions for 'private-key.ppk' 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-key.ppk": bad permissions
[email protected]: Permission denied (publickey).

C:\>
C:\>
C:\>ssh [email protected] -i private-key.ppm
Warning: Identity file private-key.ppm not accessible: No such file or directory.
[email protected]: Permission denied (publickey).

C:\>

答案1

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

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

最终看起来应该是这样的:

在此处输入图片描述

答案2

密钥只能由其指定的用户访问,其他帐户、服务或组均不能访问。

  • 图形用户界面(GUI):
    [文件]特性安全先进的
    1. 所有者:更改 →选择校长→ 输入密钥的用户 → 确定
    2. 权限条目:删除除密钥用户之外的所有内容
    3. 将密钥的用户设置为完全控制如果尚未设置
      1. 选择用户 → 修改 → 完全控制 → 确定
        或者
      2. 添加 →选择校长→ 输入密钥的用户 → 确定
    4. 确定 → 确定

  • Cmd
    ::# Set Key File Variable:
        Set Key="%UserProfile%\.ssh\id_rsa"
    
    ::# Remove Inheritance:
        Icacls %Key% /c /t /Inheritance:d
    
    ::# Set Ownership to Owner:
        :: # Key's within %UserProfile%:
             Icacls %Key% /c /t /Grant %UserName%:F
    
        :: # Key's outside of %UserProfile%:
             TakeOwn /F %Key%
             Icacls %Key% /c /t /Grant:r %UserName%:F
    
    ::# Remove All Users, except for Owner:
        Icacls %Key% /c /t /Remove:g "Authenticated Users" BUILTIN\Administrators BUILTIN Everyone System Users
    
    ::# Verify:
        Icacls %Key%
    
    ::# Remove Variable:
        set "Key="
    

  • PowerShell
    # Set Key File Variable:
      New-Variable -Name Key -Value "$env:UserProfile\.ssh\id_rsa"
    
    # Remove Inheritance:
      Icacls $Key /c /t /Inheritance:d
    
    # Set Ownership to Owner:
      # Key's within $env:UserProfile:
        Icacls $Key /c /t /Grant ${env:UserName}:F
    
       # Key's outside of $env:UserProfile:
         TakeOwn /F $Key
         Icacls $Key /c /t /Grant:r ${env:UserName}:F
    
    # Remove All Users, except for Owner:
      Icacls $Key /c /t /Remove:g Administrator "Authenticated Users" BUILTIN\Administrators BUILTIN Everyone System Users
    
    # Verify:
      Icacls $Key
    
    # Remove Variable:
      Remove-Variable -Name Key
    

答案3

除了 ibug 提供的答案之外。由于我使用 Windows 中的 ubuntu 系统来运行 ssh 命令。它仍然不起作用。所以我做了

sudo ssh ...

然后它就起作用了

答案4

你只需要做至少四件事:

  1. 禁用继承

在此处输入图片描述

  1. 将继承的权限转换为显式权限

在此处输入图片描述

  1. 移除用户组

在此处输入图片描述

  1. 最终你将无法使用任何用户访问私人文件,添加 id_rsa 就足够了。

在此处输入图片描述

相关内容