Acceso por consola a máquinas virtuales de KVM

Hoy vamos a hacer uno cortito. Esta semana, harto de no poder acceder a máquinas virtuales de mi ecosistema KVM vía ssh si no tengo una IP todavía levantada, me decidí a investigar si se podía habilitar otra forma.

Como seguramente no sabéis, yo tampoco tenía ni idea, libvirt te proporciona una herramienta muy útil para manejar todas las máquinas virtuales: virsh. Si os dirigís a una terminal y ejecutáis lo siguiente:

$ virsh help

veréis de lo que es capaz. Tenemos opciones para manejar el hypervisor del mismo modo que podemos hacerlo con virt-manager y muchas otras opciones más que interesantes que aumentarán nuestra capacidad de automatización de tareas.

La que nos interesa en este momento es un simple console pero si probáis con cualquier máquina que tengáis funcionando obtendréis lo siguiente:

$ virsh -c qemu+ssh://<user>@<kvm_server>/system console <machine_guest_name>
Connected to domain <machine_guest_name>  
Escape character is ^]  

Un consejo antes de continuar, la forma de desconectarse de este tipo de sesiones es presionando Ctrl, Alt Gr y la tecla + a la vez.

El tema es que esta opción no parece muy útil, no? Pero eso es porque todavía no hemos acabado, falta una pieza en el puzzle. Simplemente tenemos que añadir una consola al otro lado para que nos responda.

Dependiendo del sistema operativo que tengamos en cada máquina virtual el proceso variará un poco. Por ejemplo, en una Ubuntu 14.04 LTS es tan fácil como copiarnos la definición de una de las terminales y cambiar algunas cosas para que nos cree la nueva consola:

# cp /etc/init/tty1.conf /etc/init/ttyS0.conf

Editamos el nuevo archivo y cambiamos la línea en la que se define la consola con estos nuevos valores:

exec /sbin/getty -8 115200 ttyS0 xterm  

Una vez que reiniciemos la máquina ya podremos ejecutar el comando de virsh y nos debería aparecer nuestro login tras presionar la tecla intro. Un par de apuntes, primero, si estáis trabajando en una terminal dentro de un entorno gráfico debéis tener en cuenta que en realidad esta nueva consola sólo tiene la anchura y la altura de un acceso físico de toda la vida, por lo que podrían aparecer errores en el dibujado de las líneas, generalmente si lo mostrado supera los 80 caracteres.

Y el segundo tiene más que ver con la forma de conectarnos a estos invitados. Cuando queramos realizar un reinicio de la máquina simplemente escribiremos reboot y en el momento en el que termine todo el proceso de arranque veremos cómo nos vuelve a aparecer la pantalla de login sin necesidad de salirnos del comando console de virsh.

Siguiendo con las configuraciones, éste suele ser el caso más común ya que las imágenes de Ubuntu 14.04 LTS están corriendo en los principales sistemas de virtualización del mundo entero, pero como sabéis yo siempre tiro hacia tierras más inhóspitas y como en mis virtualizaciones comparten espacio servidores Debian vamos a explicar cómo activar este acceso también en su distribución madre. De este modo también estaremos preparados cuando demos el salto a la siguiente versión LTS de Ubuntu que también incorporará SystemD por defecto.

Como acabo de comentar tendremos que activar un par de cosillas en nuestro querido gestor de arranque, aunque el procedimiento es mucho más sencillo:

# systemctl enable [email protected]
Created symlink /etc/systemd/system/getty.target.wants/[email protected] → /lib/systemd/system/[email protected].  
# systemctl start [email protected]

Una vez que hayáis reiniciado podréis comprobar cómo esta característica funciona perfectamente.

Antes de que SystemD empezara a aglutinar todos estos servicios de arranque teníamos que editar el fichero /etc/inittab y añadir unos valores similares a los que hemos explicado en la primera configuración, pero está claro que todo está enfocado ya a la virtualización dada la comodidad mostrada en esta última forma. Sólo a modo histórico, una configuración para este método consistiría en añadir la siguiente línea al final del archivo:

[...]
S0:23:respawn:/sbin/getty -L ttyS0 115200 xterm  

Este método nos serviría, por ejemplo, en el OSSIM creado por la empresa AlienVault, basado en Debian, que es muy utilizado para tratar los logs de todos nuestros sistemas, mostrar estadísticas e incluso detectar intrusiones.

En honor a esta forma de acceso a las máquinas virtuales haremos un juego de palabras y hoy elegiremos la canción Hole In My Life de unos jovencísimos The Police extraído de su disco de debut Outlandos d'Amour, de todas formas recomiendo encarecidamente el disco completo, una obra maestra engendrada el mismo año en que yo venía a este mundo.