2 minutes
QEMU-Guest-Agent Exec Command
Manchmal möchte man Befehle “von außen” in VMs ausführen. Bei qemu/kvm bietet sich hierzu der qemu-guest-agent an.
Sehr praktisch kann das zum Beispiel bei Appliances wie Home-Assistant sein, bei denen man nicht unbedingt Shell-Zugriff
hat. Will man zum Beispiel schauen, welche Docker-Container in der Home-Assistant VM laufen, kann man einfach vom
KVM-Host aus über den laufenden Guest-Agent den Befehl docker ps
ausführen.
~ # virsh qemu-agent-command hassio01 \
'{"execute":"guest-exec","arguments":{"path":"/bin/bash","arg": ["-c", "docker ps"], "capture-output": true}}'
{"return":{"pid":6545}}
Um die Ausgabe sichtbar zu machen benötigt man noch einen weiteren Befehl.
~ # virsh qemu-agent-command hassio01 \
'{"execute":"guest-exec-status", "arguments": { "pid": 6545 }}' | \
jq '.return."out-data"' | tr -d "\"" | base64 -d
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
6c7ad068b61c homeassistant/amd64-addon-configurator:5.5.0 "/init" About an hour ago Up About an hour addon_core_configurator
47e955cfe7a1 homeassistant/amd64-addon-ssh:9.6.1 "/init" 2 hours ago Up 2 hours 0.0.0.0:22->22/tcp, :::22->22/tcp addon_core_ssh
7ce0ee250150 ghcr.io/home-assistant/qemux86-64-homeassistant:2023.2.2 "/init" 3 hours ago Up 3 hours homeassistant
33ed0c39c058 ghcr.io/home-assistant/amd64-hassio-supervisor:latest "/init" 3 hours ago Up 3 hours hassio_supervisor
c1c8a5dbf66a ghcr.io/home-assistant/amd64-hassio-multicast:2022.02.0 "/init" 3 hours ago Up 3 hours hassio_multicast
c1666b1b2666 ghcr.io/home-assistant/amd64-hassio-observer:2021.10.0 "/init" 3 hours ago Up 3 hours 0.0.0.0:4357->80/tcp, :::4357->80/tcp hassio_observer
739aa2d1879c ghcr.io/home-assistant/amd64-hassio-audio:2022.07.0 "/init" 3 hours ago Up 3 hours hassio_audio
ca92a77730ac ghcr.io/home-assistant/amd64-hassio-dns:2022.04.1 "/init" 3 hours ago Up 3 hours hassio_dns
c7f2cdf409a3 ghcr.io/home-assistant/amd64-hassio-cli:2022.11.0 "/init" 3 hours ago Up 3 hours hassio_cli