En el artículo anterior vimos cómo permitir que Hermes solicite el apagado de Ubuntu Server sin ejecutar directamente comandos peligrosos como shutdown, reboot, poweroff o halt.
En este nuevo artículo vamos a dar un paso más: permitir que Hermes solicite también el apagado del host Proxmox, es decir, del servidor físico o sistema anfitrión donde se está ejecutando la máquina virtual Ubuntu.
La idea final será esta:
↓
Hermes
↓
Solicita apagar Ubuntu Server
↓
Solicita apagar Proxmox
↓
Ubuntu se apaga primero
↓
Objetivo del artículo
El objetivo no es que Hermes tenga control total sobre Proxmox, sino crear un mecanismo controlado para que pueda solicitar algo muy concreto: Apagar Proxmox de forma programada y segura.
Y además hacerlo respetando un orden lógico:
- Primero se solicita el apagado de Ubuntu Server.
- Después se solicita el apagado del host Proxmox.
- Ubuntu se apaga antes.
- Proxmox se apaga unos minutos después.
Esto es importante porque Hermes está instalado dentro de Ubuntu. Si apagamos Proxmox inmediatamente, la máquina virtual se detiene de golpe. En cambio, si primero dejamos programado el apagado de Proxmox y luego apagamos Ubuntu, cada sistema tiene tiempo de cerrar correctamente.
Filosofía de seguridad
No queremos que Hermes ejecute directamente algo como:
ssh root@proxmox "shutdown -h +10"
Aunque técnicamente podría funcionar, no es la opción más limpia ni la más prudente.
La idea será seguir una filosofía similar a la del artículo anterior:
- Hermes solicita.
- Ubuntu valida.
- Proxmox ejecuta.
O, dicho de otra forma:
- Hermes no apaga directamente Proxmox.
- Hermes deja una solicitud controlada.
- Un mecanismo preparado previamente ejecuta únicamente la acción permitida.
Enfoque que vamos a seguir
En este caso tenemos dos sistemas implicados:
└── donde se ejecuta Hermes
Proxmox
└── host que queremos apagar después
Por tanto, necesitaremos preparar una comunicación segura entre ambos.
La solución más sencilla y razonable en un homelab será usar SSH con clave, pero con mucho cuidado:
Ubuntu Server → conecta por SSH → Proxmox
La clave estará pensada solo para esta tarea, y lo ideal será que Proxmox permita ejecutar únicamente el comando necesario para programar o cancelar el apagado.
Resultado esperado
Cuando todo esté configurado, podremos pedirle a Hermes algo parecido a esto:
Solicita el apagado controlado del homelab.
- Primero solicita el apagado de Proxmox dentro de 10 minutos.
- Después solicita el apagado de Ubuntu Server dentro de 1 minuto.
- No ejecutes shutdown directamente.
- Usa únicamente los mecanismos de solicitud ya configurados.
Y el flujo quedaría así:
↓
Ubuntu procesa la solicitud
↓
Ubuntu envía a Proxmox la orden de apagado programado
↓
Hermes crea solicitud para Ubuntu
↓
Ubuntu programa su propio apagado
↓
La VM Ubuntu se apaga
↓
Unos minutos después se apaga Proxmox
Advertencia importante
Este artículo toca una parte delicada del homelab: el apagado del host Proxmox.
Eso significa que un error podría dejar fuera de servicio todas las máquinas virtuales y contenedores que dependan de ese servidor.
Por eso lo haremos paso a paso, comprobando cada acción antes de continuar, y sin dar permisos amplios innecesarios.
La idea no es abrir una puerta peligrosa, sino crear un mecanismo muy concreto, limitado y fácil de auditar.
En resumen, no vamos a darle a Hermes el control completo de Proxmox, vamos a darle una forma controlada de solicitar su apagado.
En el siguiente paso empezaremos preparando el acceso seguro desde Ubuntu Server hacia Proxmox.
Paso 1: localizar la IP de Proxmox
Antes de configurar nada desde Ubuntu, necesitamos saber con seguridad la IP del host Proxmox.
En la consola de Proxmox, ejecuta:
- hostname -I
192.168.1.20
Perfecto, entonces anotamos:
- IP de Proxmox: 192.168.1.20
- IP de Ubuntu Server / Hermes: 192.168.1.22
Paso 2: comprobar conectividad desde Ubuntu hacia Proxmox
Ahora vuelve a la consola de Ubuntu Server, donde está instalado Hermes, y ejecuta:
- ping -c 4 192.168.1.20
Con esto comprobamos que Ubuntu puede ver al host Proxmox en la red.
Perfecto. La conectividad está correcta:
- Ubuntu Server / Hermes: 192.168.1.22
- Proxmox: 192.168.1.20
- Resultado: comunicación OK
Paso 3: comprobar acceso SSH a Proxmox
Desde la consola de Ubuntu Server, prueba ahora la conexión SSH al host Proxmox:
- ssh root@192.168.1.20
La primera vez puede preguntarte algo parecido a:
Are you sure you want to continue connecting (yes/no/[fingerprint])?
En ese caso escribe:
yes
Después te pedirá la contraseña de root de Proxmox.
Tenemos confirmado:
- Ubuntu Server / Hermes: 192.168.1.22
- Proxmox: 192.168.1.20
- Usuario probado: root
- SSH: funciona correctamente
- Host Proxmox: servidor
Paso 4: salir de la sesión SSH de Proxmox
Ahora sal de Proxmox para volver a la consola de Ubuntu Server.
Ejecuta:
- exit
Paso 5: crear una clave SSH específica para Hermes → Proxmox
Ahora vamos a crear una clave SSH en Ubuntu para que pueda conectar con Proxmox sin pedir contraseña.
Ejecuta en Ubuntu Server:
- ssh-keygen -t ed25519 -f ~/.ssh/hermes_proxmox_shutdown -C "hermes-proxmox-shutdown"
Cuando pregunte por la contraseña de la clave:
Enter passphrase
pulsa Enter.
Y cuando pregunte de nuevo:
Enter same passphrase again
pulsa Enter otra vez.
Perfecto. La clave se ha creado correctamente:
- Clave privada: /home/madiazg/.ssh/hermes_proxmox_shutdown
- Clave pública: /home/madiazg/.ssh/hermes_proxmox_shutdown.pub
- Comentario: hermes-proxmox-shutdown
Paso 6: copiar la clave pública a Proxmox
Ahora vamos a autorizar esa clave en el usuario root de Proxmox.
Ejecuta desde Ubuntu Server:
- ssh-copy-id -i ~/.ssh/hermes_proxmox_shutdown.pub root@192.168.1.20
Te pedirá la contraseña de root de Proxmox.
Paso 7: probar acceso SSH con la clave específica
Desde Ubuntu Server, ejecuta:
- ssh -i ~/.ssh/hermes_proxmox_shutdown root@192.168.1.20
Si todo está correcto, debería entrar en Proxmox sin pedir contraseña.
Cuando entres, no ejecutes nada más todavía. Solo sal con:
exit
Hasta ahora tenemos:
- Ubuntu Server / Hermes: 192.168.1.22
- Proxmox: 192.168.1.20
- Clave SSH: /home/madiazg/.ssh/hermes_proxmox_shutdown
- Acceso SSH sin contraseña: correcto
Paso 8: ejecutar un comando remoto de prueba en Proxmox
Ahora, desde Ubuntu Server, ejecuta este comando:
- ssh -i ~/.ssh/hermes_proxmox_shutdown root@192.168.1.20 "hostname"
Esto no apaga nada. Solo comprobará que Ubuntu puede ejecutar una orden remota en Proxmox y devolver el nombre del host.
servidor
Perfecto. La prueba remota funciona correctamente:
- Ubuntu ha ejecutado un comando en Proxmox
- Resultado devuelto por Proxmox: servidor
Eso confirma que ya tenemos esta parte funcionando:
Ubuntu Server → SSH con clave → Proxmox
Paso 9: probar una orden remota segura con fecha/hora
Antes de tocar apagados, vamos a hacer una segunda prueba inocua para confirmar que el comando se ejecuta realmente en Proxmox.
Desde Ubuntu Server, ejecuta:
- ssh -i ~/.ssh/hermes_proxmox_shutdown root@192.168.1.20 "date"
Esto solo devolverá la fecha y hora del host Proxmox.
Thu Jun 4 07:44:59 PM WEST 2026
Perfecto. Segunda prueba correcta:
- Comando remoto: date
- Ejecutado en: Proxmox
- Respuesta: Thu Jun 4 07:44:59 PM WEST 2026
Ya tenemos validado que Ubuntu puede ejecutar comandos remotos en Proxmox mediante la clave SSH.
Paso 10: probar programación de apagado en Proxmox, pero cancelable
Ahora vamos a hacer una prueba real, pero segura: programar el apagado de Proxmox para dentro de 10 minutos.
Desde Ubuntu Server, ejecuta:
- ssh -i ~/.ssh/hermes_proxmox_shutdown root@192.168.1.20 "shutdown -h +10"
Esto no apagará Proxmox inmediatamente. Solo dejará el apagado programado.
Shutdown scheduled for Thu 2026-06-04 19:56:41 WEST, use 'shutdown -c' to cancel.
Shutdown scheduled for Thu 2026-06-04 19:56:41 WEST
Paso 11: cancelar el apagado programado de Proxmox
- ssh -i ~/.ssh/hermes_proxmox_shutdown root@192.168.1.20 "shutdown -c"
Sin salida
Perfecto. En este caso, “sin salida” es normal.
Hasta aquí ya tenemos validado:
- Ubuntu puede conectar con Proxmox por SSH sin contraseña
- Ubuntu puede ejecutar comandos remotos en Proxmox
- Ubuntu puede programar el apagado de Proxmox
- Ubuntu puede cancelar el apagado de Proxmox
Paso 12: comprobar que Proxmox sigue activo
Desde Ubuntu Server, ejecuta:
- ssh -i ~/.ssh/hermes_proxmox_shutdown root@192.168.1.20 "uptime"
Esto solo confirma que Proxmox sigue funcionando con normalidad después de cancelar el apagado.
Ya tenemos validada toda la parte SSH.
Paso 13: crear el fichero de solicitud para Proxmox
- echo "apagar_proxmox_10min" > /home/madiazg/Hermes/control/solicitud_apagado_proxmox.txt
- cat /home/madiazg/Hermes/control/solicitud_apagado_proxmox.txt
apagar_proxmox_10min
Perfecto. El fichero de solicitud para Proxmox está creado correctamente
Paso 14: crear el script de control para Proxmox
Ahora vamos a crear un script en Ubuntu que lea ese fichero y, si el contenido es correcto, envíe a Proxmox la orden remota de apagado en 10 minutos.
Ejecuta en Ubuntu Server:
- sudo nano /usr/local/sbin/hermes-control-apagado-proxmox.sh
Contenido:
SOLICITUD="/home/madiazg/Hermes/control/solicitud_apagado_proxmox.txt"
SSH_KEY="/home/madiazg/.ssh/hermes_proxmox_shutdown"
PROXMOX_HOST="192.168.1.20"
if [ ! -f "$SOLICITUD" ]; then
exit 0
fi
CONTENIDO="$(cat "$SOLICITUD" | tr -d '\r\n')"
if [ "$CONTENIDO" = "apagar_proxmox_10min" ]; then
rm -f "$SOLICITUD"
/usr/bin/ssh -i "$SSH_KEY" root@"$PROXMOX_HOST" "shutdown -h +10"
fi
Después guarda el fichero, y ejecuta:
- sudo chmod 700 /usr/local/sbin/hermes-control-apagado-proxmox.sh
- sudo chown root:root /usr/local/sbin/hermes-control-apagado-proxmox.sh
Sin salida
Perfecto, sin salida es correcto para esos comandos.Eso significa que el script ya existe y tiene permisos restringidos.
Paso 15: probar el script manualmente
Como ya habíamos creado el fichero:
/home/madiazg/Hermes/control/solicitud_apagado_proxmox.txt
con este contenido:
apagar_proxmox_10min
ahora vamos a ejecutar el script manualmente desde Ubuntu Server:
- sudo /usr/local/sbin/hermes-control-apagado-proxmox.sh
Esto debería programar el apagado de Proxmox dentro de 10 minutos.
This key is not known by any other names.
Are you sure you want to continue connecting (yes/no/[fingerprint])? yes
Warning: Permanently added '192.168.1.20' (ED25519) to the list of known hosts.
Shutdown scheduled for Thu 2026-06-04 20:08:49 WEST, use 'shutdown -c' to cancel.
Perfecto. Ha funcionado: el script ha leído la solicitud y ha programado el apagado de Proxmox.
Además, ese aviso de autenticidad ha salido porque esta vez el script se ha ejecutado con sudo, es decir, como root en Ubuntu, y el usuario root aún no tenía registrada la clave del host Proxmox en su known_hosts. Ya ha quedado aceptada.
Paso 16: cancelar el apagado programado de Proxmox
Ahora cancélalo desde Ubuntu Server ejecutando:
- ssh -i ~/.ssh/hermes_proxmox_shutdown root@192.168.1.20 "shutdown -c"
Sin salida
Perfecto. De nuevo, sin salida es normal al cancelar con shutdown -c.
Ya tenemos validado:
- Script manual de Proxmox: funciona
- Programación de apagado remoto: funciona
- Cancelación de apagado remoto: funciona
Además, el aviso de autenticidad SSH para root de Ubuntu ya quedó resuelto al responder yes.
Paso 17: recrear la solicitud para la prueba final del script
Como el script borra el fichero de solicitud al procesarlo, vamos a crearlo otra vez.
Ejecuta en Ubuntu Server:
- echo "apagar_proxmox_10min" > /home/madiazg/Hermes/control/solicitud_apagado_proxmox.txt
Después comprueba:
- cat /home/madiazg/Hermes/control/solicitud_apagado_proxmox.txt
apagar_proxmox_10min
Paso 18: crear el servicio systemd para Proxmox
Ahora vamos a crear el servicio que ejecutará el script de control.
Ejecuta en Ubuntu Server:
- sudo nano /etc/systemd/system/hermes-control-apagado-proxmox.service
Contenido:
[Unit]
Description=Control de apagado de Proxmox solicitado por Hermes
[Service]
Type=oneshot
ExecStart=/usr/local/sbin/hermes-control-apagado-proxmox.shç
Guarda el fichero y sal de nano.
Paso 19: crear el timer systemd para Proxmox
- sudo nano /etc/systemd/system/hermes-control-apagado-proxmox.timer
Guarda el fichero y sal de nano.
Paso 20: activar el servicio y el timer
Ahora ejecuta en Ubuntu Server:
- sudo systemctl daemon-reload
- sudo systemctl enable --now hermes-control-apagado-proxmox.timer
Después comprueba que el timer está activo:
- systemctl status hermes-control-apagado-proxmox.timer
Eso significa que systemd está esperando al próximo disparo para ejecutar el servicio.
Pulsa q para salir.
Paso 21: esperar a que el timer procese la solicitud
Como ya teníamos creado el fichero:
/home/madiazg/Hermes/control/solicitud_apagado_proxmox.txt
con:
espera aproximadamente 1 minuto.
Debería programarse el apagado de Proxmox para dentro de 10 minutos.
Después ejecuta en Ubuntu Server:
- journalctl -u hermes-control-apagado-proxmox.service -n 30 --no-pager
En el log se ve esta línea clave:
Shutdown scheduled for Thu 2026-06-04 20:30:04 WEST, use 'shutdown -c' to cancel.
Eso confirma que el servicio systemd ha ejecutado el script y el script ha programado el apagado de Proxmox.
Paso 22: cancelar el apagado de Proxmox
Cancélalo ahora desde Ubuntu Server:
- ssh -i ~/.ssh/hermes_proxmox_shutdown root@192.168.1.20 "shutdown -c"
Sin salida
Ya tenemos validado también el flujo por systemd:
↓
timer systemd ejecuta el servicio
↓
servicio lanza el script
↓
script envía orden SSH a Proxmox
↓
Proxmox programa su apagado
↓
apagado remoto cancelable correctamente
Paso 23: recrear la solicitud para probarlo desde Hermes
Como el script borra el fichero al procesarlo, ahora vamos a dejarlo listo para probar que Hermes puede crear la solicitud.
El siguiente paso será enviarle a Hermes un prompt para que cree este fichero:
/home/madiazg/Hermes/control/solicitud_apagado_proxmox.txt
con este contenido:
apagar_proxmox_10min
Luego el timer lo detectará y programará el apagado de Proxmox en 10 minutos.
Usa este prompt en Hermes:
Solicita el apagado controlado del homelab.
No ejecutes comandos SSH.
No intentes apagar Proxmox directamente.
Debes crear únicamente estos dos ficheros de solicitud, usando los mecanismos controlados ya configurados:
1) Solicitud de apagado de Ubuntu Server:
Ruta:
/home/madiazg/Hermes/control/solicitud_apagado.txt
Contenido exacto:
apagar_ubuntu_1min
2) Solicitud de apagado de Proxmox:
Ruta:
/home/madiazg/Hermes/control/solicitud_apagado_proxmox.txt
Contenido exacto:
apagar_proxmox_10min
El objetivo es que Ubuntu Server se apague primero y que Proxmox quede programado para apagarse después.
No modifiques ningún otro fichero.
No ejecutes ninguna orden adicional.
Después informa únicamente de:
- si se ha creado correctamente la solicitud de apagado de Ubuntu
- ruta del fichero de Ubuntu
- contenido escrito en el fichero de Ubuntu
- si se ha creado correctamente la solicitud de apagado de Proxmox
- ruta del fichero de Proxmox
- contenido escrito en el fichero de Proxmox
Después, los timers deberían hacer esto:
- Ubuntu → apagado en 1 minuto
- Proxmox → apagado en 10 minutos
Para cancelar Proxmox antes de que se apague:
- ssh -i ~/.ssh/hermes_proxmox_shutdown root@192.168.1.20 "shutdown -c"
Perfecto. Hermes ha hecho exactamente lo que queríamos:
Solicitud Ubuntu: creada correctamente
- /home/madiazg/Hermes/control/solicitud_apagado.txt
- apagar_ubuntu_1min
Solicitud Proxmox: creada correctamente
- /home/madiazg/Hermes/control/solicitud_apagado_proxmox.txt
- apagar_proxmox_10min
Ahora deberían actuar los dos timer de systemd:
- Ubuntu Server → apagado en 1 minuto
- Proxmox → apagado en 10 minutos
Para cancelar solo el apagado de Proxmox, si todavía estás a tiempo:
ssh -i ~/.ssh/hermes_proxmox_shutdown root@192.168.1.20 "shutdown -c"
Y para cancelar el apagado de Ubuntu, si aún no se ha apagado:
sudo shutdown -c
El flujo completo ya queda validado: Hermes solicita ambos apagados sin ejecutar shutdown directamente.
Unos segundos más tarde se ha apagado el servidor de ubuntu:
Al cabo de unos minutos proxmox se ha apagado correctamente.
Conclusiones finales
Con esta segunda parte hemos completado el objetivo: Hermes ya puede solicitar el apagado completo del homelab de forma controlada, apagando primero la máquina virtual Ubuntu Server y después el host Proxmox.
La gran ventaja de esta solución es que no hemos tenido que modificar la seguridad interna de Hermes ni forzar al agente a ejecutar comandos bloqueados. En lugar de intentar saltarnos esa protección, hemos creado un mecanismo externo, sencillo y auditable.
Este pequeño proyecto demuestra una forma muy interesante de integrar Hermes con tareas reales de administración del sistema sin darle control absoluto sobre la infraestructura. No se trata de que Hermes tenga acceso libre al servidor, sino de crear acciones concretas, limitadas y controladas que el sistema puede ejecutar de forma segura.
Una solución sencilla, elegante y suficientemente segura para automatizar el apagado de un entorno Proxmox + Ubuntu Server dentro de un homelab.










No hay comentarios:
Publicar un comentario
Nota: solo los miembros de este blog pueden publicar comentarios.