WSL OpenSSH 忽略存储在 Windows(/mnt/c)中的私钥,如何更改权限?

WSL OpenSSH 忽略存储在 Windows(/mnt/c)中的私钥,如何更改权限?

我不仅询问(和回答)如何在 Windows 上更改权限,因为在使用 Windows 大约 20 年后,我想要这样做的原因有点特殊。我现在是 Winux 用户,在我的 Windows10 机器上运行 Ubuntu (WSL),我也在这里为 Winux 社区发布此内容。

我遇到的问题:

我有一个 OpenSSH 私钥,用于从 Linux 环境登录我的 VPS。

我将此密钥存储在 Windows 内部的某个位置(因此位于 下/mnt/c)。我将其存储在那里作为备份。

在 WSL 中,我通过以下命令对服务器的端口 22 和端口 80 建立隧道:

ssh [email protected] -L 22:localhost:22 -L 2222:localhost:80 -i /mnt/c/location/private_key_file_name

然后我得到:

@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@         WARNING: UNPROTECTED PRIVATE KEY FILE!          @
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@

Permissions 0777 for '/mnt/c/location/private_key_file_name' are too open.

It is required that your private key files are NOT accessible by others.

This private key will be ignored.

bad permissions: ignore key: /mnt/c/location/private_key_file_name
Permission denied (publickey).

使用 Putty 时我从未遇到过类似的问题,但尽管我使用 Putty,我仍然想通过原则更改权限,以及使用 OpenSSH 的密钥。

我似乎无法在私钥文件的相关位置执行 chmod 600(它会改变但随后自动改回 777)。

由于 Windows 没有提供类似 Linux 的 GUI 来更改权限,我认为我需要找到一种从 CMD 进行更改的方法。有人可能会问“我怎样才能在 Windows 中更改文件的权限,以便它等同于 Linux 权限”。

在阅读了有关以类似 Linux 的方式在 Windows 中更改权限的信息后,我得出结论,最简单最快的方法就是执行mv file ~,,chmod 600 ~/file然后执行 mv file /mnt/c/location,但这失败了,因为在我移动文件的那一刻,它又变回了 777。

以下是我的回答:

答案1

据我所知,Windows 始终会将文件的权限转换为 Windows 中常见的权限。这并不一定会有问题,因为 Windows 的安全模型与 Linux 不同,并且如果您使用强 Windows 密码来保护文件并受到 Windows Defender(包括防火墙、IIBA、暴力攻击预防机制)的保护。

因此,基本上,要解决这个问题,只需将您的私钥从 Windows 中的备份复制到 WSL,在那里更改权限(chmod 600),然后使用 WSL 副本。

有关许可 Linux 私钥的更多信息

相关内容