如何无需用户密码挂载查看QEMU虚拟机文件系统(用于排查Ubuntu cloud-init自动安装的密码哈希问题)
如何无需用户密码挂载查看QEMU虚拟机文件系统(用于排查Ubuntu cloud-init自动安装的密码哈希问题)
我完全懂你遇到的这个麻烦——cloud-init自动安装时自定义密码哈希不生效,想查/etc/shadow却没法登录虚拟机,确实头疼!别担心,咱们可以直接把QEMU的raw镜像挂载到本地机器上查看内容,步骤很简单:
- 首先确保虚拟机已经完全关闭,绝对不能在虚拟机运行时挂载镜像,否则会损坏文件系统。你可以通过关闭kvm进程或者用
ps aux | grep kvm确认相关进程已终止。 - 用
fdisk查看镜像内的分区结构,找到根分区的位置:
输出里会列出各个分区的信息,比如根分区通常是编号为2的分区(对应后续的sudo fdisk -l image.img/dev/loopXp2)。 - 使用
losetup将raw镜像挂载为循环设备:
执行后会返回一个循环设备路径,比如sudo losetup -f --show image.img/dev/loop0。 - 加载分区表,让系统识别镜像内的分区:
现在你就能看到类似sudo partx -a /dev/loop0/dev/loop0p1、/dev/loop0p2的分区设备了。 - 创建一个本地挂载点:
sudo mkdir -p /mnt/vm-root - 挂载根分区到刚才创建的挂载点(这里假设根分区是
/dev/loop0p2,根据你实际的fdisk输出调整):sudo mount /dev/loop0p2 /mnt/vm-root - 现在你就可以直接查看虚拟机的
/etc/shadow文件了:
对比里面的哈希值和你生成的是否一致,就能快速定位问题所在。cat /mnt/vm-root/etc/shadow - 操作完成后,一定要记得卸载并清理循环设备,避免资源占用:
sudo umount /mnt/vm-root sudo partx -d /dev/loop0 sudo losetup -d /dev/loop0
另外给你个小提示:Ubuntu的cloud-init对密码哈希格式有要求,必须使用SHA-512算法,并且哈希值要以$6$前缀开头。你可以用这个命令生成符合要求的哈希:
mkpasswd -m sha-512
输入你的明文密码后,就能得到正确格式的哈希值,替换到autoinstall配置里应该就能正常登录了。
备注:内容来源于stack exchange,提问作者albertoperdomo2
相关产品推荐
相关产品推荐

