如果我正在與 VirtualBox 來賓進行 ssh 會話,我可以知道我是否在虛擬機器內嗎?

如果我正在與 VirtualBox 來賓進行 ssh 會話,我可以知道我是否在虛擬機器內嗎?

假設我開啟了一個到某個 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 製造商。 VM 必須有一個 NIC,因為我們是透過 SSH 連線的。
以下是我從具有 4 個 NIC 的 VM 獲得的資訊:

$ 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 型號預期的不同)。

相關內容