Cómo acceder a la consola de un guest KVM desde la consola del host

Valoración del Usuario:  / 1
MaloBueno 

Cuando se instala un host de máquinas virtuales KVM generalmente se incluye la aplicación "virt-manager" la cual permite gestionar máquinas virtuales desde un entorno gráfico amigable. Esta aplicación simplifica la creación de máquinas virtuales y permite el acceso a los entornos gráficos de las mismas. Sin embargo, cuando se hace un uso serio de KVM en el mundo real, un host de máquinas virtuales se instala sin entorno gráfico para reducir la sobrecarga en el host y permitir alojar un mayor número de máquinas virtuales.



En el artículo Cómo acceder a la consola gráfica de una máquina virtual KVM en un host sin entorno gráfico explico cómo acceder a la consola gráfica de una máquina virtual KVM desde un host remoto mediante el hardware gráfico virtual implementado con VNC. Esta es una solución útil pero existe una forma más fácil y eficiente para acceder a la consola de una máquina virtual GNU/Linux directamente desde el host.

En un host KVM sin entorno gráfico, la herramienta virsh es la interfaz principal para administrar dominios (máquinas virtuales, guests). Esta herramienta se utiliza para crear, pausar, y apagar dominios en un host. También puede utilizarse para listar los dominios actuales.

Entre la gran cantidad de comandos que virsh para administrar dominios, dispositivos y redes virtuales existe el comando console, el cual permite conectarse a la consola serie virtual de un guest.

Por ejemplo, el siguiente host KVM (llamemosle "pepeserver") posee dos máquinas virtuales Ubuntu Server en ejecución:

[root@pepeserver ~]# virsh list
 Id    Name                           State
----------------------------------------------------
 1     server01                       running
 2     server02                       running

¿Qué sucede si intentamos conectarnos a la consola serie virtual del guest "server01"?

[root@pepeserver ~]# virsh console server01
Connected to domain server01
Escape character is ^]

Luego de ejecutar el comando virsh console server01 no se observa más salida ni prompt de login, tampoco es posible ingresar caracteres. Como se observa, para salir de esta consola se debe presionar la combinación de teclas Ctrl + ]. La falta de acceso a la consola del guest se puede resolver siguiendo los siguientes pasos:

La máquina virtual guest necesita que a su consola serie se le asigne un prompt de login, que se presentará luego de una conexión serie exitosa desde virsh.

Conectarse a la máquina virtual en cuestión. Puede que piensen que ésto es "el dilema del huevo y la gallina", ¿cómo me voy a conectar a la consola de la máquina virtual, si es precisamente lo que estoy tratando de hacer siguiendo este tutorial? Si la máquina virtual no tiene (o no funcionan por problemas en la configuración de la red virtual) SSH o telnet, no queda otra alternativa que conectarse a la consola de la máquina virtual mediante VNC o conectarse al host mediante la aplicación virt-manager, desde un host remoto.

Una vez conectado al guest en cuestión (en este ejemplo un Ubuntu Server) se debe configurar la terminal (tty) serie. Copiar la configuración de otra tty:

$ sudo cp /etc/init/tty1.conf /etc/init/ttyS0.conf

Editar la configuración de la ttyS0 y modificar la línea exec, debe quedar así:

exec /sbin/getty -8 115200 ttyS0 xterm

Luego de reiniciar la máquina virtual es posible conectarse a la consola desde virsh:

<[root@pepeserver ~]# virsh console server01
Connected to domain server01
Escape character is ^]

Ubuntu x.x.x server01.pepe.org ttyS0

server01.pepe.org login:

NOTA: Tal vez sea necesario presionar la tecla <Enter> para que se presente el prompt de login.

Luego de ingresar usuario y contraseña vemos el propmt de la máquina virtual:

pepe@server01:~$ 

Para salir de la consola del guest se debe ingresar nuevamente la combinación de teclas Ctrl + ], aunque antes es recomendable ejecutar logout, por seguridad, para no dejar el usuario logueado en la consola:

pepe@server01:~$ logout

Ubuntu x.x.x server01.pepe.org ttyS0

server01.pepe.org login:
[root@pepeserver ~]#

Con esta configuración tal vez sea suficiente para nuestro trabajo, aunque es posible ahondar aun más y lograr que la consola serie del guest muestre prácticamente todo, por ejemplo los mensajes del kernel durante el inicio (boot). Para lograr esto es necesario indicarle a grub2 que envíe los mensajes del kernel a la consola serie. Editar el archivo /etc/default/grub:

sudo vi /etc/default/grub

Cambiar la variable GRUB_CMDLINE_LINUX_DEFAULT de "quiet" a "console=ttyS0":

GRUB_CMDLINE_LINUX_DEFAULT="console=ttyS0"

Actualizar GRUB:

sudo update-grub2

Luego de reiniciar el guest, todos los mensajes del kernel se ven hasta que se muestra el prompt de login.



Suscribirse

    Registrate para recibir las novedades y artículos por correo electrónico.

Linuxito en G+