无法在Windows 10 WSL中更改根密码。

我已经尝试了这两个命令

sudo passwd

并且

sudo -u root /bin/bash

但是当我输入新密码两次后,它会显示密码已更新。你关闭终端并打开一个新的实例,它仍然使用旧的根密码。
请帮忙。

sudo -u root 可能是为了让事情正常运行而采取的一种拼命尝试。但是 sudo passwd 应该可以更改密码。当我打开一个新的 WSL shell 并尝试 'sudo apt-get install' 时,旧密码不应该被要求。 - Dragonborn
4个回答

有一个更简单的方法。

  1. 打开 cmd.exe
  2. 输入 wsl -u root
  3. 输入 passwd username 并更改密码
  4. 输入 exit
  5. 输入 wsl
  6. 输入 sudo echo hi 确认新密码是否有效。

1这种方法更简单,答案更清晰直接,完美地起作用了。 - Mickael V.
也适用于修复任何阻止 sudo 正常工作的问题。 - SEoF
这对我来说很有效。我正在使用WSL Legacy(默认设置)。 - Daggie Blanqx - Douglas Mwangi
步骤2-4的简单版本 -- wsl -u root passwd username - NotTheDr01ds
3我不知道为什么,但是这个命令对我来说似乎不起作用。当我输入wsl -u root时,它只是访问了Ubuntu的root用户,然后我输入passwd root,它要求输入新密码,我输入了新密码,并确认了一遍。然而,在我启动Ubuntu终端并使用sudo su时,新密码却无效... - M. K Hossain
@M.KHossain,你进入wsl后使用wsl -u root命令,然后运行的是passwd root而不是passwd ubuntu吗? - MikeyT
1哦,我为了这个回来了多少次啊!太多了。 - Niko Pasanen

在WSL中,sudo passwd将更改WSL根用户的密码。
在WSL中,passwd将更改当前WSL用户的密码。
要指定要使用的WSL用户(临时),请使用wsl -u [user]
在WSL中,passwd [user]将更改任何WSL用户的密码。
在WSL中,sudo通常会要求输入当前WSL用户的密码。
在Windows cmd.exe中,您可以更改默认的WSL用户(永久):
在当前版本中:ubuntu.exe config --default-user [user] 在旧版本17031709中:lxrun /setdefaultuser [user] 可能需要重新启动。
您可能想要更改具有sudo权限但非根用户的密码。
你可能不想更改根用户的密码(因为在Ubuntu中,根用户通常不应该有密码,应该使用sudo)。你也不应该将默认用户设置为根用户。即使在Windows工作时,这仍然是一个不好的实践。
有关“用户帐户和权限”的官方Microsoft文档可在此处找到: https://msdn.microsoft.com/en-us/commandline/wsl/user_support

我不得不关闭Ubuntu并重新启动它,以使ubuntu config --default-user [user]生效。 - Stefan Lasiewski
只是一个快速的评论,如此处所提到:https://askubuntu.com/a/966537/340341,你需要在`ubuntu config行后面加上sc stop LxssManagersc stop LxssManager`,以使更新在当前shell中生效。 - Marawan Okasha
你链接中的相关部分:https://docs.microsoft.com/en-us/windows/wsl/user-support?redirectedfrom=MSDN#forgot-your-password 微软使用root用户作为示例。他们分享了不好的做法吗?为什么给root设置密码是不好的做法? - varnaud

假设您在本说明中使用的是Ubuntu。

  • 如果您在WSL上忘记了密码,只需在Windows上打开命令提示符,输入cmd进行搜索。
  • 然后输入ubuntu config --default-user root将root设置为Linux Bash Shell的默认用户。
  • 然后打开Linux Bash shell,它将以root身份登录而不要求密码。
  • 然后使用passwd username来重置任何用户的密码。
  • 使用ubuntu config --default-user username将重置回您正常的Linux用户帐户。

/bin/bash/: 配置:找不到命令 - Geoffrey
1@systemovich - 你需要在Windows命令提示符(cmd.exe)中运行ubuntu config ...命令。要从那里打开bash shell,只需输入wsl并按Enter键。要返回到Windows命令提示符,请在WSL提示符中输入exit并按Enter键。 - StingyJack
9有一个更简单的方法。
  1. 打开 cmd.exe
  2. 输入 wsl -u root
  3. 输入 passwd username 并更改密码
  4. 输入 exit
  5. 输入 wsl
  6. 输入 sudo echo h 来确认新密码是否有效。
- bicole
@bicole 你可以把这条评论删掉了,因为你的供应商回答已经在前面了 :) 谢谢! - lacostenycoder

没有必要重新配置Ubuntu,但是如果你安装了多个发行版并且Ubuntu不是你的默认选项,除了root用户之外,你还必须指定发行版。
  • 选项1 -- Ubuntu是默认的WSL发行版:

    wsl.exe -u root
    
  • 选项2 -- Ubuntu不是默认的WSL发行版:

    1. 首先确定发行版的名称:

      wsl.exe -l -v
      
    2. 然后使用发行版的名称加上-d/--distribution

      wsl.exe -d <distro> -u root
      
然后继续你的工作,重置你的常规用户账户。借用@NotTheDr01ds的一句话,假设你的发行版名称是“Ubuntu”:
wsl.exe -d Ubuntu -u root passwd username

典型的Ubuntu发行版名称包括:
- Ubuntu:从Microsoft Store或使用"unversioned"应用程序的`wsl --install`安装时。 - Ubuntu-18.04、Ubuntu-20.04或Ubuntu-22.04:从Microsoft Store或使用特定版本的Ubuntu的`wsl --install`安装时。

wsl -d Ubuntu -u root passwd <user> 对我来说没用 :( - user1599324
@user1599324 我刚刚编辑了问题,并加入了一些细节,希望这些能让你满意并能解决你的问题。 - NotTheDr01ds