如何为Linux KVM qcow2镜像/虚拟机重置忘记的root密码
在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