如何在 Windows 10 上保护 SSH 私钥

Mar*_*own 23 ssh ssh-keys windows-10

我正在使用适用于 Windows 10 的新 ssh 客户端,并且在尝试使用私钥连接时出现此错误:

@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@         WARNING: UNPROTECTED PRIVATE KEY FILE!          @
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
Permissions for 'MyPair.pem' are too open. It is required that your
private key files are NOT accessible by others. This private key will
be ignored. Load key "MyPair.pem": bad permissions ec2-user@192.0.2.0:
Permission denied (publickey).
Run Code Online (Sandbox Code Playgroud)

我知道如果我在 Linux 上,我需要运行chmod 600来设置文件权限,但是你在 Windows 10 上使用什么?

JW0*_*914 23

密钥只能由它们的目标用户访问,其他帐户、服务或组不能访问。

  • GUI:
    [文件]属性安全先进的
    1. 所有者:密钥的用户
    2. 权限条目:删除除密钥用户之外的所有条目
    3. 将密钥的用户设置为完全控制

  • Cmd
    ::# Set Key File Variable:
        Set Key="%UserProfile%\.ssh\id_rsa"
    
    ::# Remove Inheritance:
        Icacls %Key% /c /t /Inheritance:d
    
    ::# Set Ownership to Owner:
        Icacls %Key% /c /t /Grant %UserName%:F
    
    ::# Remove All Users, except for Owner:
        Icacls %Key%  /c /t /Remove Administrator BUILTIN\Administrators BUILTIN Everyone System Users
    
    ::# Verify:
        Icacls %Key%
    
    ::# Remove Variable:
        set "Key="
    
    
    Run Code Online (Sandbox Code Playgroud)
  • 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:
      Icacls $Key /c /t /Grant $env:UserName:F
    
    # Remove All Users, except for Owner:
      Icacls $Key  /c /t /Remove Administrator BUILTIN\Administrators BUILTIN Everyone System Users
    
    # Verify:
      Icacls $Key
    
    # Remove Variable:
      Remove-Variable -Name Key
    
    
    Run Code Online (Sandbox Code Playgroud)
  • WSL/Cygwin:
    # Set Variables:
      # Key File:
        key="/path/to/key"
    
      # User:
        user="$(echo $USER)"
    
    # Set Ownership to Owner: (assumes user's name is also user's group name)
      chown $user:$user $key
    
    # Set Access Rights
      chmod 0600 $key
    
    # Verify
      ls -l $key
    
    
    Run Code Online (Sandbox Code Playgroud)

  • $env:username 正确返回我的用户名。Icacls $Key /c /t /Grant $env:UserName:F 产生错误:未知参数:“/grant”。当拼写出我的用户名而不是使用变量时,命令成功。 (3认同)
  • 通过 GUI 工作。通过 powershell 运行 CLI 时遇到“系统找不到指定的路径”错误 (2认同)