Cómo habilitar QEMU Guest Agent guest-exec en distribuciones basadas en RHEL

Este artículo explica cómo habilitar el comando guest-exec del QEMU Guest Agent en distribuciones basadas en RHEL (AlmaLinux, CloudLinux, CentOS, Rocky Linux, etc.) cuando está deshabilitado por defecto.

Síntomas

  • Ejecutar qm guest exec <VMID> -- <comando> desde Proxmox devuelve:
  Agent error: The command guest-exec has been disabled for this instance
  • El QEMU guest agent está instalado, ejecutándose y responde a pings (guest-ping funciona)
  • Afecta a AlmaLinux, CloudLinux, CentOS, Rocky Linux y otras distribuciones derivadas de RHEL

Causa

Las distribuciones basadas en RHEL incluyen el QEMU guest agent con comandos RPC restringidos en /etc/sysconfig/qemu-ga. El mecanismo varía según la versión del SO:

Versión del SO Variable de Config Estilo de Flag guest-exec por Defecto
CentOS/RHEL 7 BLACKLIST_RPC --blacklist= Bloqueado
AlmaLinux/CloudLinux/RHEL 8 BLACKLIST_RPC --blacklist= Bloqueado
AlmaLinux/CloudLinux/RHEL 9 FILTER_RPC_ARGS --allow-rpcs= No está en lista de permitidos
AlmaLinux/CloudLinux/RHEL 10 FILTER_RPC_ARGS --allow-rpcs= Parcialmente permitido

Solución por versión del SO

CentOS 7 / RHEL 7

Mecanismo: Lista de bloqueados con BLACKLIST_RPC

Configuración por defecto:

BLACKLIST_RPC=guest-file-open,guest-file-close,guest-file-read,guest-file-write,guest-file-seek,guest-file-flush,guest-exec,guest-exec-status

Cómo verificar:

grep BLACKLIST_RPC /etc/sysconfig/qemu-ga

Corrección con sed:

sed -i 's/^BLACKLIST_RPC=.*/BLACKLIST_RPC=/' /etc/sysconfig/qemu-ga
systemctl restart qemu-guest-agent

Corrección manual: Abra /etc/sysconfig/qemu-ga y reemplace la línea BLACKLIST_RPC=... con BLACKLIST_RPC=, luego reinicie el agente.


AlmaLinux 8 / CloudLinux 8 / RHEL 8

Mecanismo: Lista de bloqueados con BLACKLIST_RPC

Configuración por defecto:

BLACKLIST_RPC=guest-file-open,guest-file-close,guest-file-read,guest-file-write,guest-file-seek,guest-file-flush,guest-exec,guest-exec-status

Cómo verificar:

grep BLACKLIST_RPC /etc/sysconfig/qemu-ga

Corrección con sed:

sed -i 's/^BLACKLIST_RPC=.*/BLACKLIST_RPC=/' /etc/sysconfig/qemu-ga
systemctl restart qemu-guest-agent

Corrección manual: Abra /etc/sysconfig/qemu-ga y reemplace la línea BLACKLIST_RPC=... con BLACKLIST_RPC=, luego reinicie el agente.


AlmaLinux 9 / CloudLinux 9 / RHEL 9

Mecanismo: Lista de permitidos con FILTER_RPC_ARGS

Configuración por defecto:

FILTER_RPC_ARGS="--allow-rpcs=guest-sync-delimited,guest-sync,guest-ping,guest-get-time,guest-set-time,guest-info,guest-shutdown,guest-fsfreeze-status,guest-fsfreeze-freeze,guest-fsfreeze-freeze-list,guest-fsfreeze-thaw,guest-fstrim,guest-suspend-disk,guest-suspend-ram,guest-suspend-hybrid,guest-network-get-interfaces,guest-get-vcpus,guest-set-vcpus,guest-get-disks,guest-get-fsinfo,guest-set-user-password,guest-get-memory-blocks,guest-set-memory-blocks,guest-get-memory-block-info,guest-get-host-name,guest-get-users,guest-get-timezone,guest-get-osinfo,guest-get-devices,guest-ssh-get-authorized-keys,guest-ssh-add-authorized-keys,guest-ssh-remove-authorized-keys,guest-get-diskstats,guest-get-cpustats"

RPCs faltantes: guest-exec, guest-exec-status, guest-file-open, guest-file-close, guest-file-read, guest-file-write

Cómo verificar:

grep FILTER_RPC_ARGS /etc/sysconfig/qemu-ga | grep -o 'guest-exec'
# Sin salida = necesita corrección

Corrección con sed:

sed -i 's/guest-get-cpustats"/guest-get-cpustats,guest-exec,guest-exec-status,guest-file-open,guest-file-close,guest-file-read,guest-file-write"/' /etc/sysconfig/qemu-ga
systemctl restart qemu-guest-agent

Corrección manual: Abra /etc/sysconfig/qemu-ga, encuentre la línea FILTER_RPC_ARGS que termina con guest-get-cpustats", y agregue ,guest-exec,guest-exec-status,guest-file-open,guest-file-close,guest-file-read,guest-file-write antes de la comilla de cierre.


AlmaLinux 10 / CloudLinux 10 / RHEL 10

Mecanismo: Lista de permitidos con FILTER_RPC_ARGS

La configuración por defecto incluye: guest-exec, guest-file-open, guest-file-read, guest-file-close

RPCs faltantes: guest-exec-status, guest-file-write

Cómo verificar:

grep FILTER_RPC_ARGS /etc/sysconfig/qemu-ga | grep -oE 'guest-(exec|file)[a-z-]*' | sort
# Si guest-exec-status o guest-file-write faltan, necesita corrección

Corrección con sed:

sed -i 's/guest-file-close"/guest-file-close,guest-exec-status,guest-file-write"/' /etc/sysconfig/qemu-ga
systemctl restart qemu-guest-agent

Corrección manual: Abra /etc/sysconfig/qemu-ga, encuentre la línea FILTER_RPC_ARGS que termina con guest-file-close", y agregue ,guest-exec-status,guest-file-write antes de la comilla de cierre.


Verificación

Desde el host de Proxmox:

# Debería devolver salida en lugar del error "disabled"
qm guest exec <VMID> -- echo ok

Desde dentro de la VM:

# Verificar que el proceso en ejecución tiene los flags actualizados
ps aux | grep qemu-ga

# Revisar la configuración
cat /etc/sysconfig/qemu-ga | grep -E 'BLACKLIST|FILTER'

Notas adicionales

  • La ubicación del archivo de configuración es /etc/sysconfig/qemu-ga en todas las distribuciones basadas en RHEL.
  • Las actualizaciones de paquetes (dnf update qemu-guest-agent) pueden sobrescribir /etc/sysconfig/qemu-ga y volver a aplicar las restricciones por defecto. Después de actualizaciones, verifique la configuración.
  • En CentOS 7 y derivados de RHEL 8, el agente usa --blacklist= que fue renombrado a --block-rpcs= en RHEL 9. El flag antiguo aún funciona pero está deprecado