web-dev-qa-db-ja.com

VirtualBoxゲストとのsshセッションに参加している場合、VM内にいるかどうかを知ることができますか?

IPアドレスへのsshセッションを開いたとします。 sshセッション内から、そのsshセッションがVirtualBoxゲストVMで実行されているのか、VM以外のマシンで実行されているのかを確認できますか?

ノート:

  • OSホスト/ゲスト:CentOS 7
  • Virtualbox:6.0
3
boardrider

はい、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/

5
SamAndrew81

以下は 別のフォーラムで受け取った回答 に基づいています。


簡単な方法の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
2
boardrider

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

しかし、VMがあなたに嘘をつくように構成されている場合(たとえば、MACアドレスは任意である可能性があります)、もっと努力する必要があります./ proc/*で不整合を見つけることができるかもしれません(たとえば、異なるCPUモデルで予想されるよりも利用可能なコアの数)。

1
mlp