如何为Linux KVM qcow2镜像/虚拟机重置忘记的root密码

时间:2020-01-09 10:39:37  来源:igfitidea点击:

在Debian Linux VM中忘记了root帐户的密码,并且我不再能够运行su-命令。
如何为qcow2格式的KVM VM的根帐户重置密码?

您可以使用guestfish修改镜像。
它是一个shell程序和命令行工具,用于检查和编辑虚拟机文件系统。
它使用libguestfs并公开guestfs API的所有功能。
在本教程中我们学习了如何使用guestfish更改根帐户密码。

如何安装guestfish

如果您使用的是CentOS/RHEL,请使用yum命令:

$ sudo yum install libguestfs-tools

Fedora Linux用户运行dnf命令:

$ sudo dnf install libguestfs-tools

Debian/Ubuntu Linux用户运行apt命令/apt-get命令:

$ sudo apt install libguestfs-tools

步骤1关闭来宾VM(虚拟机)

运行以下virsh命令:

# virsh list

输出示例:

Id    Name                           State
---------------------------------------------------
2     debian9-vm1                    running

要关闭名为debian9-vm1的VM(虚拟机):

# virsh shutdown 2

或者

# virsh shutdown debian9-vm1

输出示例:

Domain debian9-vm1 is being shutdown

步骤2查找KVM VM镜像的位置

执行以下命令以获取qcow2镜像的位置:

# virsh dumpxml debian9-vm1 | grep 'source file'

输出示例:

<source file='/var/lib/libvirt/images/debian9-vm1.qcow2'/>

步骤3使用guestfish重置/更改根密码

首先通过执行以下命令来生成新的root用户帐户密码:

# openssl passwd -1 mySecretRootAccountPasswordHere
$M1bf5Y3T$p2CYEz8vlUD2R.fXydTLt.

请复制$1 $M1bf5Y3T $p2CYEz8vlUD2R.fXydTLt.密码。
您需要在接下来的几个步骤中使用它。

如何为Linux KVM VM重置忘记的root密码

让我们通过运行以下guestfish命令启动该过程:

# guestfish --rw -a /var/lib/libvirt/images/debian9-vm1.qcow2

您将看到如下提示:

><fs>

要启动后端,请输入run或launch命令:

><fs> launch

要列出分区,请执行:

><fs> list-filesystems

现在挂载找到的任何磁盘。
例如,我找到了/dev/sda1,所以我运行以下安装命令:

><fs> mount /dev/sda1 /

使用文本编辑器(例如vi命令或emacs命令)编辑/etc/shadow文件:

><fs> vi /etc/shadow

查找root帐户条目并删除加密的密码。
从:

root:$FU5Nl9oxxxx:17572:0:99999:7:::

要(从上面的openssl命令中替换如下):

root:$M1bf5Y3T$p2CYEz8vlUD2R.fXydTLt.:17572:0:99999:7:::

在vi/vim中保存并关闭文件。
运行同步命令:

><fs> flush

最后,退出guestfish:

><fs> quit

步骤4启动VM

现在该测试您的新root密码了。
因此,启动VM:

# virsh start debian9-vm1

输出示例:

Domain debian9-vm1 started

现在,您可以使用控制台或ssh登录:

# ssh Hyman@debian9-vm1
$ su 

或使用控制台命令:

# virsh list
# virsh console debian9-vm1

关于virt-customize命令的注释

如果您发现上述方法比较困难,请尝试以下简单命令:

# virsh shutdown debian9-vm1
# virt-customize -a /var/lib/libvirt/images/debian9-vm1.qcow2 --root-password password:NewRootUserPasswordHere --uninstall cloud-init

输出示例:启动虚拟机并使用ssh/console命令测试新的root密码:

# virsh start debian9-vm1