Windows 10 上的 Ubuntu - SSH“私钥的权限 xxxx 太开放

Windows 10 上的 Ubuntu - SSH“私钥的权限 xxxx 太开放

我有一个密钥文件位于,C:\private-key.pem并且在 Ubuntu 子系统上有一个指向它的软链接:~/.ssh/private-key.pem -> /mnt/c/private-key.pem

当我尝试从 Ubuntu 子系统通过 ssh 连接到某些远程机器时,我得到:

@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@         WARNING: UNPROTECTED PRIVATE KEY FILE!          @
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
Permissions 0777 for '/home/artur/.ssh/private-key.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 "/home/artur/.ssh/private-key.pem": bad permissions
Permission denied (publickey).
  • 这是在 Windows 1803 更新之后开始的:我试图在 WSL 上和 WSL 内使用chmod 400该密钥。我试图将所有者设置为我并删除 Windows 上此密钥文件的所有其他用户的 ACL,但每次我都会得到或。C:\~/.sshPermission denied
    Permissions XXXX for '/home/artur/.ssh/private-key.pem' are too open

有人能帮助我并解释如何在 Windows 和 Ubuntu 子系统上配置密钥权限吗?

答案1

在 Windows WSL 中对我有用的解决方案(无需更改文件模式):

sudo ssh -i keyfile <user>@ip

答案2

我正在阅读字里行间的内容,并假设您在 Windows 10 中使用 Linux 子系统。当您将 Windows 文件从 符号链接C:\到 中的 Linux 文件系统时$HOME/.ssh,实际文件的权限仍在 Windows 的控制之下,并且 Linux 窗口中向您显示的权限最能代表 Windows 权限;您无法从/mnt/cLinux 更改 中的 Windows 文件的权限。Microsoft 提供的常见问题解答讨论如何在两个重叠的文件系统中处理文件。

您需要更改权限的文件是符号链接指向的文件,因此这意味着/mnt/c

似乎无法授予用户对 Windows 文件的访问权限。即使你禁用文件的权限继承,只授予你自己的用户读取权限,Linux 权限仍会显示为-r--r--r--,因此无法用于~/.ssh

唯一的选择似乎是将文件从 Windows 复制到 Linux,然后您就可以使用该文件chmodchown

答案3

将 SSH 密钥复制到您的 WSL~/.ssh目录,因为除 600/400 权限之外的任何 SSH 密钥都会危及该密钥的安全。

  • 一旦密钥被复制,请确保其 EOL 已更改为 LF。

    • 有很多方法可以做到这一点,从Atom 文本编辑器到 CLI 解决方案,如dos2unixunix2dos等。
  • 查看@simpleuser 的回答下面了解为什么不能通过 Windows 更改权限,这需要将密钥复制到 WSL 的~/.ssh目录

答案4

我在 Windows 10 Pro 上使用 Linux Windows Shell,并且安装了 cygwin

将 WSL UID 与 cygwin UID 匹配解决了这个问题。
通过以下方式在 cygwin 终端中找到 cygwin UIDid

匹配UID的两个步骤:

  1. 以管理员权限打开cmd.exe并使用新的 UID 通过 进行编辑 regedit
    HKCU\Software\Microsoft\Windows\CurrentVersion\Lxss{cefb...cb50}\DefaultUid
    
  2. 在 WSL 终端中使用以下命令更改 WSL 中的 UID:

    sudo vi /etc/passwd
    chmod 600 ~/.ssh/private-key.pem
    

参考:

相关内容