我有一个密钥文件位于,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:\
~/.ssh
Permission 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/c
Linux 更改 中的 Windows 文件的权限。Microsoft 提供的常见问题解答讨论如何在两个重叠的文件系统中处理文件。
您需要更改权限的文件是符号链接指向的文件,因此这意味着/mnt/c
似乎无法授予用户对 Windows 文件的访问权限。即使你禁用文件的权限继承,只授予你自己的用户读取权限,Linux 权限仍会显示为-r--r--r--
,因此无法用于~/.ssh
唯一的选择似乎是将文件从 Windows 复制到 Linux,然后您就可以使用该文件chmod
了chown
。
答案3
将 SSH 密钥复制到您的 WSL~/.ssh
目录,因为除 600/400 权限之外的任何 SSH 密钥都会危及该密钥的安全。
一旦密钥被复制,请确保其 EOL 已更改为 LF。
- 有很多方法可以做到这一点,从Atom 文本编辑器到 CLI 解决方案,如
dos2unix
、unix2dos
等。
- 有很多方法可以做到这一点,从Atom 文本编辑器到 CLI 解决方案,如
查看@simpleuser 的回答下面了解为什么不能通过 Windows 更改权限,这需要将密钥复制到 WSL 的
~/.ssh
目录
答案4
我在 Windows 10 Pro 上使用 Linux Windows Shell,并且安装了 cygwin
将 WSL UID 与 cygwin UID 匹配解决了这个问题。
通过以下方式在 cygwin 终端中找到 cygwin UIDid
匹配UID的两个步骤:
- 以管理员权限打开
cmd.exe
并使用新的 UID 通过 进行编辑regedit
。HKCU\Software\Microsoft\Windows\CurrentVersion\Lxss{cefb...cb50}\DefaultUid
在 WSL 终端中使用以下命令更改 WSL 中的 UID:
sudo vi /etc/passwd chmod 600 ~/.ssh/private-key.pem
参考: