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-pingfunciona) - 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-statusCómo verificar:
grep BLACKLIST_RPC /etc/sysconfig/qemu-gaCorrección con sed:
sed -i 's/^BLACKLIST_RPC=.*/BLACKLIST_RPC=/' /etc/sysconfig/qemu-ga
systemctl restart qemu-guest-agentCorrecció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-statusCómo verificar:
grep BLACKLIST_RPC /etc/sysconfig/qemu-gaCorrección con sed:
sed -i 's/^BLACKLIST_RPC=.*/BLACKLIST_RPC=/' /etc/sysconfig/qemu-ga
systemctl restart qemu-guest-agentCorrecció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ónCorrecció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-agentCorrecció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ónCorrecció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-agentCorrecció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 okDesde 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-gaen todas las distribuciones basadas en RHEL. - Las actualizaciones de paquetes (
dnf update qemu-guest-agent) pueden sobrescribir/etc/sysconfig/qemu-gay 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