Ejecutando QEMU/KVM con monitor:kvm ...some_parameters... -monitor unix:/my_path/my_fifo,server,nowait
Luego podemos conectarnos usando socat - UNIX-CONNECT:/my_path/my_fifo
y luego escribir comandos.
Fácil y práctico.
Me gustaría exponer la interfaz del monitor a la red local (probablemente usando socat, según el método de seguridad), que es bastante segura. ¿Cómo puedo proteger el acceso al monitor?
No veo ninguna opción de contraseña, certificado, etc. disponible. Así que sospecho que tengo que confiar en un método externo a QEMU/KVM.
Respuesta1
Puede utilizar SSH para acceder a dicho socket de forma segura, aprovechando las opciones de seguridad proporcionadas por SSH. No necesita socat
nada, porque SSH permite reenviar socket a socket o tcp a socket mediante -L
la opción:
-L [bind_address:]port:host:hostport
-L [bind_address:]port:remote_socket
-L local_socket:host:hostport
-L local_socket:remote_socket
Por ejemplo, si su qemu
proceso se ejecuta con -monitor unix:/my_path/my_fifo,server,nowait
la opción, use ssh virtualization-host -L /tmp/monitor:/my_path/my_fifo
to connect y luego conéctese al socket local /tmp/monitor
, o use ssh virtualization-host -L 12345:/my_path/my_fifo
y telnet localhost:12345
(el cliente SSH escuchará solo en localhost en este caso).
Para lograr una mayor seguridad, utilice claves SSH para conectarse a los monitores. En el host de virtualización remoto, cree un usuario que tendrá rw
derechos sobre el /my_path/my_fifo
objeto. Cree un par de claves y coloque la clave pública en ~/.ssh/authorized_keys
el archivo de ese usuario de forma restringida para permitir solo el reenvío:
restrict,port-forwarding,command="/bin/false" ssh-... ..... (the public key string)
Para conectarse, use un comando que no asigna un shell y no ejecuta un comando, útil solo para reenvíos:
ssh monitoruser@virtualization-host -i mointor_private_key -L 12345:/my_path/my_fifo -N
y finalmente, use telnet localhost 12345
para acceder al socket del monitor reenviado vía SSH.