云主机修改密码失败,云主机登录失败
背景:云主机登录异常,怀疑密码丢失,重置密码后依然无法登录;已授权,可重起云主机。
第一个问题:云主机修改密码失败
看问题,找原因,无法从云管修改密码,就意味着大概率是qga(qemu-guest-agent)的问题,当然也不排除密码正确,只是登录失败的可能性
先看qga,密码修改失败,那么原密码就是正确的,获取云主机
第二个问题才是云主机异常的核心问题:云主机登录异常
console登录,提示root: no shell:Permission denied
说明:密码正确,但是出现系统内权限问题导致无法登录进入系统
救援模式,修改密码
mount查看/dev/vda1系统盘挂在/sysroot目录下。
chroot /sysroot失败,报错/bin/sh: Permission denied
查看/bin/sh 权限正常777是bash的软连接,查看/bin/bash权限正常755
再次回溯,发现chroot报错与root登录系统时的报错提示一致,最终都是指向
shell:Permission denied。
那么就有理由怀疑是/sysroot内部的bash权限问题。
ls -l /sysroot/bin/bash #果然是客户操作,导致文件执行权限被禁用
但是这一个initramfs内部组件十分简单,没有配置chmod工具,所以不能修改文件权限
尝试进入nova的救援模式,修改文件权限
nova rescue $instanceID $passwd[qwer1234]
结果rescue盘禁用了chmod命令,同时发现包括chroot等命令都被禁用了。
cp 命令待验证,可以尝试备份一下系统盘的bash文件,然后把rescue盘的bash复制到实例系统盘中去啊,有可能会失败,因为不知道云主机后期有没有升级过bash,即使能成功会不会有其他问题,如果修改后系统能起来,则还需要把原bash文件加上执行权限,然后替代回去。
nova unrescue $instanceID 解除救援模式
因为宿主机本身没安装libguestfs,而由于软件多次迭代宿主机yum源里面的libgustfs版本有存在与宿主机当前的libvirt版本不匹配的问题,直接安装可能会导致组件升降级,所以libguestfs作为风险问题直接被禁用了。
可尝试关机通过nbd挂载,修复文件,值得注意的是有的宿主机内核不支持nbd,这样还可以尝试从云主上摘下系统盘挂载到其他云主机环境上去修改。