如果我与 VirtualBox 客户机进行 ssh 会话,我能否知道自己是否在 VM 内?

如果我与 VirtualBox 客户机进行 ssh 会话,我能否知道自己是否在 VM 内?

假设我打开了一个到 IP 地址的 ssh 会话。我能否从 ssh 会话中判断该 ssh 会话是在 VirtualBox 客户虚拟机上运行,​​还是在非虚拟机上运行?

笔记:

  • 操作系统主机/客户机:CentOS 7
  • 虚拟盒:6.0

答案1

是的,您可以使用它dmidecode来实现这一点:
sudo yum install dmidecode
sudo dmidecode -s system-manufacturer

例如,在我的 VMware Workstation CentOS VM 中它返回以下内容: VMware, Inc.

在您的 VirtualBox VM 中它将返回: innotek GmbH

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

答案2

以下是基于我在另一个论坛上收到的答案


一种快捷方式是查询 NIC 制造商。由于我们通过 SSH 连接,因此虚拟机必须有 NIC。
以下是我从具有 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)

08:00:27部分显示 NIC 制造商是 VirtualBox(即,我们在虚拟机中)。

其他方法可以从操作系统获取硬件信息,例如:

$ 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

如果Guest Additions安装了以下物品,我们可以有进一步的证据:

$ VBoxControl -version
6.0.0r127566

但我认为应该使用第一个技巧(使用 MAC 地址)。


编辑1:
运行这些来获取ssh环境:

  • 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

答案3

如果虚拟机没有配置为欺骗您,那么这里其他答案中介绍的技术就可以了。

但是如果虚拟机配置成欺骗你(例如 MAC 地址可以是任意的),那么你就需要更加努力了。你可能能够在 /proc/* 中发现不一致之处(例如,可用内核数与 CPU 型号的预期内核数不同)。

相关内容