ある 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 モデルで予想されるコア数と異なるコア数が使用可能)。