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

Cloud-init 18.5模块执行失败未生成SSH密钥,如何排查VM故障?

排查Cloud-init导致的SSH无法登录问题(RHEL8/9 + KVM/Libvirt环境)

1. 宿主机挂载VM磁盘直接读取核心日志

因为无法SSH登录,优先从宿主机侧获取VM内部日志:

  • 先定位VM磁盘路径:virsh domblklist <vm-name>
  • 关机后挂载磁盘到宿主机目录:mount /path/to/vm-disk /mnt/vm-root
  • 查看关键日志文件:
    • /mnt/vm-root/var/log/cloud-init.log:记录Cloud-init全流程执行细节,模块启动、失败堆栈都在这里
    • /mnt/vm-root/var/log/cloud-init-output.log:输出userdata脚本的执行内容,包括自定义脚本的报错信息

2. 检查Cloud-init执行状态与阶段记录

挂载磁盘后,验证Cloud-init是否完成所有阶段:

  • 查看是否存在完成标记:ls /mnt/vm-root/var/lib/cloud/instance/boot-finished,不存在则说明执行卡在某个阶段
  • 读取状态JSON文件:cat /mnt/vm-root/var/lib/cloud/instance/status.json,里面有各阶段的成功/失败标记
  • 核对已执行模块:cat /mnt/vm-root/var/lib/cloud/instance/run/modules.d/*.done,确认ssh、set-passwords等关键模块是否执行

3. 验证Userdata是否被正确接收

排查Userdata传输过程中的异常:

  • 查看VM内实际读取到的Userdata:cat /mnt/vm-root/var/lib/cloud/instance/user-data.txt,对比你传入的内容是否一致,排查截断、篡改问题
  • 检查Libvirt配置:virsh dumpxml <vm-name> | grep -A 20 cloud-init,确认Userdata的传递方式(文件/注入)是否配置正确

4. 排查SSH服务本身的配置与状态

即使Cloud-init执行异常,也可能是SSH自身配置问题:

  • 查看SSH连接日志:cat /mnt/vm-root/var/log/secure,查找连接被拒绝的具体原因(如密码认证未开启、用户不存在)
  • 检查SSH配置文件:cat /mnt/vm-root/etc/ssh/sshd_config,确认PasswordAuthentication yes、PermitRootLogin等参数是否符合预期
  • 验证用户存在性:cat /mnt/vm-root/etc/passwd,确认Userdata中配置的用户是否创建成功

5. 重点核查密码设置模块的执行

针对Userdata中的密码配置,做专项检查:

  • 在cloud-init.log中搜索set-passwords,查看是否有Setting passwords for user <username>的日志,以及是否存在密码格式错误等报错
  • 检查用户密码哈希:cat /mnt/vm-root/etc/shadow | grep <username>,如果密码字段为!!或*,说明密码未被正确设置

6. 开启Debug日志排查偶发问题

因为问题非频繁出现,下次部署时开启Cloud-init Debug模式:

  • 在Userdata开头添加:
    #cloud-config
    debug: true
    
  • 或者通过内核参数传递:修改Libvirt XML配置,在<cmdline>中添加cloud-init.debug=1
  • 开启后cloud-init.log会记录更详细的执行细节,便于定位偶发失败点

7. 检查宿主机侧的Cloud-init传递机制

偶发问题可能源于宿主机的Libvirt传递异常:

  • 查看Libvirt虚拟机日志:cat /var/log/libvirt/qemu/<vm-name>.log,排查是否存在Userdata读取失败等报错
  • 验证宿主机Cloud-init工具状态:cloud-init --version,确保宿主机工具版本与VM内版本兼容

内容的提问来源于stack exchange,提问作者guru

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.13 05:45:18