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 dmidecode
para 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:27
parte 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 Additions
esté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 ssh
entorno:
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).