在 Windows 中的 Ubuntu / Linux Bash 中重置密码

Mah*_*K V 293 password-recovery windows-subsystem-for-linux

我已在 Windows 10(可从 Microsoft 获得)上安装 Linux Bash,但我忘记了密码。

我已经搜索了一个解决方案,但我只找到了涉及在系统启动之前做一些事情的建议,比如访问恢复模式,但在这种情况下这不起作用,因为这个 Ubuntu 只是 Windows 系统中的一个应用程序,没有它自己的启动过程。

如何重置密码?

小智 456

  • 运行bash并记下您的 Linux 用户名(这不需要与您的 Windows 用户名匹配),请参阅如何找出我的用户名?
  • 如果正在运行,请关闭 Ubuntu 上的 Bash(否则下一个命令将失败)。
  • 在 Windows 管理员命令提示符 ( Super+ X, A) 中,将默认用户更改为 root:

    ubuntu config --default-user root
    
    Run Code Online (Sandbox Code Playgroud)

如果您在 WSL 中使用 Ubuntu 18.04,则命令已更改为ubuntu1804,因此

ubuntu1804 config --default-user root
Run Code Online (Sandbox Code Playgroud)

如果您在 WSL 中使用 Ubuntu 18.04,则命令已更改为ubuntu1804,因此

ubuntu1804 config --default-user your_username
Run Code Online (Sandbox Code Playgroud)

观看完整视频以恢复您的密码 Windows 子系统 Linux https://youtu.be/dTR232yvDCE

注1:视频中使用的子系统不是Ubuntu,而是Kali Linux。因此命令的不同。

注意 2:如果您仍在使用周年更新附带的原始 Ubuntu 子系统,请使用命令lxrun。建议升级到通过 Microsoft Store 分发的子系统版本。)

  • `lxrun` 适用于 WSL 的测试版。如果你从应用商店安装 ubuntu,命令是 `ubuntu config --default-user root`。 (7认同)
  • @Kirby:在 Windows 命令提示符中运行命令之前,您必须从 WSL shell 注销。 (3认同)
  • 如果你在 WSL 上安装了 ubuntu 18.04,命令是 `ubuntu1804` 而不是 `ubuntu`。希望这可以避免一些头疼。 (3认同)
  • 是的,这是另一种方法,但我收到错误消息:“无法将默认用户设置为:root”。 (2认同)

Nob*_*ody 100

在 Windows PowerShell ( Super+ X, i) 中,您可以使用以下命令登录 Ubuntu root 帐户

wsl --user root
Run Code Online (Sandbox Code Playgroud)

然后像往常一样更改密码,即对于当前用户(即 root)使用

passwd
Run Code Online (Sandbox Code Playgroud)

或者对于另一个用户

passwd username
Run Code Online (Sandbox Code Playgroud)

它以交互方式要求您输入新密码(两次)。不需要 Windows 管理员权限。

如果您在 WSL 中安装了多个发行版,那么您可以列出已安装发行版的名称

wsl -l
Run Code Online (Sandbox Code Playgroud)

然后使用发行版的名称来指定您要登录到哪个发行版,例如登录到 Ubuntu 20.04:

wsl -d Ubuntu-20.04 --user root
Run Code Online (Sandbox Code Playgroud)

  • 惊人的!这适用于 10/2019。而且,非常重要的是,即使在 Windows 机器上没有管理员权限,这个提示命令也能工作(如果您使用的是公司 PC,这可以节省时间和金钱)。 (3认同)
  • 是的,想通了。不得不使用`passwd user`。谢谢。 (3认同)

小智 73

以上没有奏效。即使更改了默认用户,Bash 也总是以我的用户打开。

所以我做了这个,它起作用了:

  1. 编辑此文件(在记事本或记事本++中):

    %localappdata%\lxss\rootfs\etc\shadow
    
    Run Code Online (Sandbox Code Playgroud)
  2. 找到你的普通用户,例如:

    user1:$jsdjksadgfhsdf.saflsdf.sadf.safd:17299:0:99999:7:::
    
    Run Code Online (Sandbox Code Playgroud)

    并简单地删除哈希部分(下面的部分)

    $jsdjksadgfhsdf.saflsdf.sadf.safd
    
    Run Code Online (Sandbox Code Playgroud)

    你会看到一个不同的哈希 - 我希望 :) 所以它应该看起来像:

    user1::17299:0:99999:7:::
    
    Run Code Online (Sandbox Code Playgroud)
  3. 保存文件

  4. 使用 root 权限再次启动 Bash 并设置您的密码

     sudo bash
     passwd <your-user-name> 
    
    Run Code Online (Sandbox Code Playgroud)

    您现在可以设置新密码而无需输入前一个密码。

  • 这有效,但官方目录现在类似于 %localappdata%\Packages\CanonicalGroupLimited.UbuntuonWindows_79rhkp1fndgsc\LocalState\rootfs\etc\shadow (15认同)
  • 这是_到目前为止_的最佳答案。要找到你的 `shadow` 文件的路径,你可以使用这个令人厌恶的 PowerShell:`Get-ChildItem -Path C:\ -Filter shadow -Recurse -ErrorAction SilentlyContinue -Force` 这是一个非常详细的 `find /mnt/c 版本/ -name shadow` 在执行和结果中。无需提升权限即可编辑文件,但请确保在执行此操作之前关闭 bash 窗口。 (14认同)
  • 这是赢家!当第一个答案没有时效果很好。 (2认同)

Ric*_*lay 28

编辑如果您有商店安装的 WSL 发行版,这将不再有效。

要添加到 Tmu 的答案中,这里有一个 Powershell 脚本 ( gist ) 可以自动执行该过程(包括自动检测当前默认用户名)

# Resets the password for the default LXSS / WSL bash user
$lxssUsername = (Get-ItemProperty HKCU:\SOFTWARE\Microsoft\Windows\CurrentVersion\Lxss).DefaultUsername
lxrun /setdefaultuser root
bash -c "passwd $lxssUsername"
lxrun /setdefaultuser $lxssUsername
Run Code Online (Sandbox Code Playgroud)


Jor*_*eee 5

我也需要在 Windows 10 中重置密码,我有 WLS 1

1- 检查您的 linux/ubuntu 名称,列出文件夹:

%userprofile%\AppData\Local\Microsoft\WindowsApps
Run Code Online (Sandbox Code Playgroud)

就我而言,我找到了 Ubuntu1604.exe,因此我将在下一步中使用ubuntu1604 之类的名称。  列出文件:%userprofile%\AppData\Local\Microsoft\WindowsApps

2- 以管理员权限打开 CMD 并运行(您将一无所获):

ubuntu1604 config --default-user root
Run Code Online (Sandbox Code Playgroud)

3- 启动您的 WSL,检查您是否获得了 root 权限或运行 whoami(您需要是 root)并使用以下命令更改您的密码:

passwd [your-linux-username]
Run Code Online (Sandbox Code Playgroud)

4- 关闭您的 WSL 并返回 CMD 窗口并设置回您的默认 linux 用户名:

ubuntu1604 config --default-user [your-linux-username]
Run Code Online (Sandbox Code Playgroud)

5- 再次启动您的 WSL/Ubuntu/AnotherLinux,检查并享受。