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 dmidecode
para 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:27
parte 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 Additions
sejam 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 ssh
ambiente:
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).