Se eu estiver em uma sessão ssh para um convidado do VirtualBox, posso saber se estou dentro de uma VM?

Se eu estiver em uma sessão ssh para um convidado do VirtualBox, posso saber se estou dentro de uma VM?

Digamos que eu abri uma sessão ssh para um endereço IP. Posso dizer, de dentro da sessão ssh, se essa sessão ssh está sendo executada em uma VM convidada do VirtualBox ou em uma máquina não-VM?

Notas:

  • Host/Convidado do SO: CentOS 7
  • Caixa Virtual: 6.0

Responder1

Sim, você pode usar dmidecodepara fazer isso:
sudo yum install dmidecode
sudo dmidecode -s system-manufacturer

Por exemplo, na minha VM VMware Workstation CentOS, ele retornou isto: VMware, Inc.

Na sua VM VirtualBox, ele retornaria: innotek GmbH

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

Responder2

O abaixo é baseado em umresposta que recebi em outro fórum.


Uma maneira rápida seria consultar o fabricante da NIC. A VM precisa ter uma NIC, pois estamos nos conectando via SSH.
Aqui está o que recebo de uma VM que possui 4 NICs:

$ 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)

Essa 08:00:27parte mostra que o fabricante da NIC é o VirtualBox (ou seja, estamos em uma VM).

Outras formas poderiam ser obter informações do nosso hardware do sistema operacional, por exemplo:

$ 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 ter mais evidências caso Guest Additionssejam instalados:

$ VBoxControl -version
6.0.0r127566

Mas acho que o primeiro truque (com os endereços MAC) deve ser usado.


Editar 1:
Execute-os para obter o sshambiente:

  • 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

Responder3

Se a VM não estiver configurada para mentir para você, as técnicas apresentadas em outras respostas aqui são adequadas.

Mas se a VM estiver configurada para mentir para você (por exemplo, os endereços MAC podem ser arbitrários), você precisará trabalhar mais. Você pode encontrar inconsistências em /proc/* (por exemplo, número diferente de núcleos disponíveis do que seria esperado para o modelo de CPU).

informação relacionada