Допустим, я открыл сеанс ssh на IP-адрес. Могу ли я узнать из сеанса ssh, запущен ли этот сеанс ssh на гостевой виртуальной машине VirtualBox или на машине без виртуальной машины?
Примечания:
- Хост/гостевая ОС: CentOS 7
- Виртуалбокс: 6.0
решение1
dmidecode
Да, для этого можно использовать :
sudo yum install dmidecode
sudo dmidecode -s system-manufacturer
Например, на моей виртуальной машине VMware Workstation CentOS он вернул следующее:
VMware, Inc.
В вашей виртуальной машине VirtualBox это вернет:
innotek GmbH
Источник:https://www.ostechnix.com/check-linux-system-physical-virtual-machine/
решение2
Нижеприведенное основано наответ я получил на другом форуме.
Один быстрый способ — запросить производителя сетевой карты. У виртуальной машины должна быть сетевая карта, поскольку мы подключаемся через SSH.
Вот что я получаю от виртуальной машины с 4 сетевыми картами:
$ 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
часть показывает, что производителем сетевой карты является 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/* (например, другое количество доступных ядер, чем ожидалось для модели ЦП).