文章【libvirt & qemu无需重启(在线)更改VNC密码】已于2019-02-17更新。
有两个方法,一个是通过libvirt的virDomainUpdateDeviceFlags接口,另一个是通过qemu-monitor。
以下把“DOMAIN_NAME”替换为虚拟机的名称,“YOU_NEW_VNC_PASSWORD”替换为你的新密码。
通过virDomainUpdateDeviceFlags接口
使用libvirt管理虚拟机的情况下,这个方法是首选,libvirt官方是不推荐使用了libvirt的情况下操纵qemu-monitor的。
首先编写VNC graphic的XML配置:
1 2 3 |
<graphics type="vnc" passwd="YOU_NEW_VNC_PASSWORD" port="-1" autoport="yes" websocket="-1"> <listen type="address" address="0.0.0.0"/> </graphics> |
注意,使用了current及live标记的情况下,是不能更改监听地址与监听端口的,所以需要运行时修改密码请注意port与address与现配置一致。
virDomainUpdateDeviceFlags函数原型见此:https://libvirt.org/html/libvirt-libvirt-domain.html#virDomainUpdateDeviceFlags
这是PHP调用的例子:
1 2 |
// $VNCGraphicXML = ... $domain->libvirt_domain_update_device($domainResource, $VNCGraphicXML, VIR_DOMAIN_DEVICE_MODIFY_LIVE | VIR_DOMAIN_DEVICE_MODIFY_CONFIG); |
使用virsh控制台的,可以通过update-device命令,把前面编写的XML内容保存为文件,例如domain-vnc-graphic.xml:
1 |
virsh update-device DOMAIN_NAME domain-vnc-graphic.xml --config --live |
通过qemu-monitor
1 |
virsh qemu-monitor-command DOMAIN_NAME --hmp set_password vnc YOU_NEW_VNC_PASSWORD |