VirtualBox ゲストへの SSH セッション中の場合、VM 内にいるかどうかを知ることはできますか?

VirtualBox ゲストへの SSH セッション中の場合、VM 内にいるかどうかを知ることはできますか?

ある IP アドレスへの ssh セッションを開いたとします。その ssh セッション内から、その ssh セッションが VirtualBox ゲスト VM 上で実行されているのか、それとも非 VM マシン上で実行されているのかを知ることはできますか?

ノート:

  • OSホスト/ゲスト: 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

以下は、別のフォーラムで受け取った回答


簡単な方法の 1 つは、NIC メーカーに問い合わせることです。SSH 経由で接続しているため、VM には NIC が必要です
。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 であることを示しています (つまり、VM 内にあります)。

他の方法としては、OS からハードウェアの情報を取得する方法があります。たとえば、次のようになります。

$ 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

VM が嘘をつくように構成されていない場合は、ここで他の回答で紹介されている手法で問題ありません。

しかし、VM がユーザーを欺くように構成されている場合 (例: MAC アドレスが任意の可能性がある)、より一層の作業が必要になります。/proc/* で不整合が見つかる場合があります (例: CPU モデルで予想されるコア数と異なるコア数が使用可能)。

関連情報