在 Windows 10 机器上使用 WSL 2 时,我对用户名有点困惑。
当我使用我的 Microsoft 帐户安装 Windows 10 时,它创建了用户phili
。
当我在电源外壳,用户主目录默认为:
C:\Users\phili\
在/mnt/c/Users/phili/.ssh
WSL 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 中的用户名从 更改
phili
为phil
?
如果可能的话,我愿意使用用户名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_keys
。C:\Users\phili\.ssh\authorized_keys
通过更改 OpenSSH 的注册表设置,您可以“混淆”任何试图 的客户端ssh-copy-id
。
不过,对于通过 ssh 进入 WSL2 的其他一些选项,请参阅我的在这里回答。