我从 cloud.centos.org 下载了一个 .qcow2 映像,并一直在尝试更改密码,以便在加载到虚拟环境中时可以登录它。我尝试使用 virt-edit 编辑 /etc/shadow:
virt-edit -a CentOS-6-x86_64-GenericCloud-1604.qcow2 /etc/shadow
我尝试首先使用生成密码openssl passwd -l
并将其放在那里,当这不起作用时,我尝试从另一台计算机复制加密密码,但这也不起作用。然后我尝试编辑 /etc/passwd 并删除“x”,据我了解,这将允许我无需密码即可登录:
root::0:0:root:/root:/bin/bash
但这也不起作用。我验证了 console 和 tty 通过 tty11 位于 /etc/securetty 中,但我不确定从这里去哪里。
编辑:virt-customize -a CentOS-6-x86_64-GenericCloud-1603.qcow2 --root-password password:password
也不起作用。
答案1
当您进行编辑时,虚拟机是否已经在运行?
“不起作用”是什么意思:虚拟机是否已切换至单用户模式,或者只是拒绝您的登录?
请注意,CentOS 很可能启用了 SELinux,因此您需要touch /.autorelabel
对 VM 的根文件系统执行等效操作,以便在修改后 VM 启动时触发 SELinux 重新标记。例如:
touch .autorelabel
virt-copy-in -a CentOS-6-x86_64-GenericCloud-1603.qcow2 .autorelabel /
另请注意,该图像包括/etc/cloud/cloud.cfg
,这表明它已配备cloud-init
,及其配置(使用 查看virt-cat -a CentOS-6-x86_64-GenericCloud-1603.qcow2 /etc/cloud/cloud.cfg
):
users:
- default
disable_root: 1 <--- this might be the root cause of your troubles!
ssh_pwauth: 0
[...]
我尝试virt-customize --uninstall cloud-init
按照其他地方的建议在图像上运行,但这对我不起作用。也许 CentOS 6 太旧了,无法在映像中进行包操作,至少使用我当前安装的工具是这样?
/etc/init.d/cloud-config
无论如何,您可能可以通过使用刚刚退出的脚本覆盖虚拟机内的、和/etc/init.d/cloud-final
来暴力禁用它,然后一旦虚拟机运行并可访问,就在虚拟机内运行?/etc/init.d/cloud-init
/etc/init.d/cloud-init-local
yum erase cloud-init