You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何无需用户密码挂载查看QEMU虚拟机文件系统(用于排查Ubuntu cloud-init自动安装的密码哈希问题)

如何无需用户密码挂载查看QEMU虚拟机文件系统(用于排查Ubuntu cloud-init自动安装的密码哈希问题)

我完全懂你遇到的这个麻烦——cloud-init自动安装时自定义密码哈希不生效,想查/etc/shadow却没法登录虚拟机,确实头疼!别担心,咱们可以直接把QEMU的raw镜像挂载到本地机器上查看内容,步骤很简单:

  • 首先确保虚拟机已经完全关闭,绝对不能在虚拟机运行时挂载镜像,否则会损坏文件系统。你可以通过关闭kvm进程或者用ps aux | grep kvm确认相关进程已终止。
  • 用fdisk查看镜像内的分区结构,找到根分区的位置:
    sudo fdisk -l image.img
    
    输出里会列出各个分区的信息,比如根分区通常是编号为2的分区(对应后续的/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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.23 08:13:05