WSL 2 中的用户主页与 Windows 用户混淆

WSL 2 中的用户主页与 Windows 用户混淆

在 Windows 10 机器上使用 WSL 2 时,我对用户名有点困惑。

当我使用我的 Microsoft 帐户安装 Windows 10 时,它创建了用户phili

当我在电源外壳,用户主目录默认为: C:\Users\phili\/mnt/c/Users/phili/.sshWSL bash 中。

当我去狂欢在 WSL 上,cd ~我最终进入了/home/phil

WSL 中的用户名似乎phil与 Windows 用户名不同phili。我不确定,但我可能phil在安装 WSL 时选择了它。


我遇到的问题是,当我尝试使用 SSH 从我的 Macbook 进入我的 WSL 时,它ssh phil@<windows-host-ip>不会接受我的密码(我也尝试过更改密码,但没有成功)。我只能使用ssh phili@<windows-host-ip>我的 Windows 密码登录。

如果我使用我的 Macbook 在我的 Windows 机器上安装公钥,ssh-copy-id phili@<windows-host-ip>它会将它们放在 中/home/phil/.ssh/authorized_keys而不是 中C:\Users\phili\.ssh\authorized_keys

编辑:中的文件/mnt/c/Users/phili/归用户所有phil

phil@PHIL-DESKTOP:/mnt/c/Users/phili/.ssh$ ls
total 0
-rwxrwxrwx 1 phil phil  28 Oct  3 14:39 authorized_keys

当然我可以手动复制公钥,但这不是重点。

我该如何解决这些用户名带来的混乱?

  • 将 WSL 中的用户名更改为phili
  • 将 Windows 中的用户名从 更改philiphil

如果可能的话,我愿意使用用户名phil

谢谢您的任何提示。

答案1

关于用户名和主目录的一些说明

  • WSL 有用户名,Windows 有用户名。当然,它们不必相同。这根本不是问题(也与您的问题无关)。

  • WSL/Linux 用户有一个主目录。默认情况/home/<username>下,这是 ,但不一定如此。当然,就你的情况而言,它是 。你的 WSL 用户名是phil,你的 WSL/Linux 主目录是/home/phil

  • Windows 用户有一个主目录/配置文件目录,该目录(默认情况下)以该用户的 Microsoft 帐户命名。不,我也不认为这很理想。当我在 Windows 上创建用户时,我首先将其创建为本地用户(而不是使用 Microsoft 帐户),这样它将设置我的用户名和目录名称相同。 然后我将我的登录信息转换为使用 Microsoft 帐户。

    在 Windows 11 中,这将变得更加困难。我的理解是,它需要 Windows 11 Pro 或更高版本,但我不确定。在虚拟机中安装 Win 11 Pro 时,我使用没有网络这样它就无法使用Microsoft帐户。

  • 在 Windows 中更改用户名很容易。更改配置文件目录则不那么容易。我有一段时间没试过了,但根据这一页有一些使用配置文件文件夹的注册表设置,因此您必须弄乱 Windows 注册表才能完成此操作。

    替代方案,如这个答案是创建一个新的使用本地帐户登录 Windows 用户。然后将所有内容复制过去。

  • 但无论如何,更改用户名并不是解决问题的办法。这里的主要“问题”是 Windows 和 WSL/Linux 有不同的主目录。你应该不是使它们相同。

    你绝对不能让 Windows 使用你的 WSL/Linux 主目录,因为 WSL/Linux 位于一个“虚拟化”驱动器上您的 Windows 配置文件目录 ( %userprofile%\AppData\Local\Packages\<DistroPackage>\LocalState)。

    你绝对不应该让您的 WSL 发行版使用您的 Windows 主目录。Linux 主目录应位于 Linux 文件系统上。对于 WSL,这是 ext4。将您的主目录放在 NTFS 驱动器上会导致权限问题(某种程度上可以解决,但不建议)和性能问题(目前无法解决)。

Windows/Linux 权限边界

/mnt/c/Users/phili/ 中的文件归用户所有phil

嗯,实际上不是。Windows 驱动器是安装由 WSLphil授予驱动器所有者的权限。这就是为什么ls在 Linux 中运行时会将您的 Linux 用户显示为所有者。

在 PowerShell 中运行:

(Get-Acl C:\users\phili\).Owner
(Get-Acl C:\users\phili\).Access

你会发现这SYSTEM实际上是视窗所有者,以及视窗用户phili拥有完全控制权。


ssh 进入 WSL

我只能使用 ssh phili@ 和我的 Windows 密码登录。

对我来说这意味着你视窗OpenSSH 已安装。这是一件好事,因为ssh无论如何,这是我推荐的进入 WSL2 的解决方案的一部分。

不过,我有点困惑,为什么ssh-copy-id会把文件放在你的 WSL/Linux 主目录中。 ssh-copy-id应该连接到相同的服务器ssh(在本例中是 Windows OpenSSH)。你的ls命令显示,authorized_keys所以C:\Users\phili\也许你只是将​​目录名称颠倒了?

或者你也许使用这些说明将 Windows OpenSSH shell 更改为 WSL?这也可以解释,因为ssh-copy-id会将文件放置在 WSL/Linux OpenSSH 位置,但实际上视窗OpenSSH 正在处理事情。在这种情况下,答案实际上是将文件从 移到/home/phil/.ssh/authorzied_keysC:\Users\phili\.ssh\authorized_keys通过更改 OpenSSH 的注册表设置,您可以“混淆”任何试图 的客户端ssh-copy-id

不过,对于通过 ssh 进入 WSL2 的其他一些选项,请参阅我的在这里回答

相关内容