Si estoy en una sesión ssh con un invitado de VirtualBox, ¿puedo saber si estoy dentro de una VM?

Si estoy en una sesión ssh con un invitado de VirtualBox, ¿puedo saber si estoy dentro de una VM?

Digamos que abrí una sesión ssh en una dirección IP. ¿Puedo saber, desde la sesión ssh, si esa sesión ssh se está ejecutando en una máquina virtual invitada de VirtualBox o en una máquina que no es una máquina virtual?

Notas:

  • Anfitrión/invitado del sistema operativo: CentOS 7
  • Caja virtual: 6.0

Respuesta1

Sí, puedes usar dmidecodepara lograr esto:
sudo yum install dmidecode
sudo dmidecode -s system-manufacturer

Por ejemplo, en mi VM VMware Workstation CentOS devolvió esto: VMware, Inc.

En su VirtualBox VM devolvería: innotek GmbH

Fuente:https://www.ostechnix.com/check-linux-system-physical-virtual-machine/

Respuesta2

Lo siguiente se basa en unarespuesta que recibí en otro foro.


Una forma rápida sería consultar al fabricante de la NIC. La VM debe tener una NIC, ya que nos estamos conectando vía SSH.
Esto es lo que obtengo de una máquina virtual que tiene 4 NIC:

$ ifconfig | grep ether
        ether 08:00:27:ae:2c:b5  txqueuelen 1000  (Ethernet)
        ether 08:00:27:1d:8b:9f  txqueuelen 1000  (Ethernet)
        ether 08:00:27:15:c6:f7  txqueuelen 1000  (Ethernet)
        ether 08:00:27:64:bd:3b  txqueuelen 1000  (Ethernet)

Esa 08:00:27parte muestra que el fabricante de la NIC es VirtualBox (es decir, estamos en una VM).

Otras formas podrían ser obtener información de nuestro hardware desde el SO, por ejemplo:

$ lshw | grep -i virtualbox
WARNING: you should run this program as super-user.
WARNING: output may be incomplete or inaccurate, you should run this program as super-user.
             product: VirtualBox Graphics Adapter
             product: VirtualBox Guest Service

Podemos tener más pruebas en caso de que Guest Additionsestén instalados:

$ VBoxControl -version
6.0.0r127566

Pero creo que el primer truco (con las direcciones MAC) debería ser el que se debe utilizar.


Edición 1:
Ejecute estos para obtener el sshentorno:

  • if [[ $(ifconfig | grep '08:00:27') ]] ; then echo "We're in Virtualbox VM" ; fi
  • lshw | grep -i virtualbox
  • VBoxControl -version
  • if [[ "innotek GmbH" == "$( sudo dmidecode -s system-manufacturer)" ]] ; then echo "We're in Virtualbox VM" ; fi

Respuesta3

Si la máquina virtual no está configurada para mentirle, entonces las técnicas presentadas en otras respuestas aquí están bien.

Pero si la máquina virtual está configurada para mentirle (por ejemplo, las direcciones MAC pueden ser arbitrarias), entonces necesitará trabajar más duro. Es posible que pueda encontrar inconsistencias en /proc/* (por ejemplo, un número de núcleos disponibles diferente al esperado para el modelo de CPU).

información relacionada