Une question intéressante. Je me suis connecté à un hôte Linux (probablement SuSE). Existe-t-il un moyen de dire par programme que je suis un hôte VM ou non?
Supposons également que les vmtools ne sont pas installés.
Utilisez des outils Linux standard pour inspecter le matériel du système.
cat /proc/scsi/scsi
ou
ethtool -i eth0
ou
dmidecode | grep -i vmware
Si la sortie de ces commandes affiche du matériel avec un nom de fabricant "VMWare", vous êtes sur une machine virtuelle VMWare. Plusieurs commandes sont fournies ici car les configurations système et les outils diffèrent.
facter virtual
xenu
indique qu'il s'agit d'une machine virtuelle. S'il est retourné "physique", l'inverse est vrai (pas une VM), par exemple:
facter virtual
Physical
Il existe une application pratique qui pourrait aider à s'appeler virt-what . Je ne l'ai pas utilisé avec VMWare, mais cela a bien fonctionné avec Qemu.
Vous pourriez être en mesure de vous faire une idée en regardant autour sous /sys
. Par exemple /sys/class/dmi/id/sys_vendor
a une valeur de VMware, Inc.
.
S'il est installé, vous pouvez utiliser lshw . La commande lshw -class system
renvoie ceci sur mon système:
server1
description: Computer
product: VMware Virtual Platform
vendor: VMware, Inc.
version: None
serial: VMware-...
width: 64 bits
capabilities: smbios-2.4 dmi-2.4 vsyscall64 vsyscall32
Certains environnements virtuels nomment certains de leurs périphériques virtuels avec des noms qui sont un peu révélateurs, par exemple, VirtualBox présentant une carte graphique qui s’appelle "VirtualBox Display Adapter". Mais la recherche de ces liens vous relie à un VM et éventuellement à une gamme étroite de versions).
Il pourrait être possible pour votre code de voir quel type de virtualisation il pourrait mettre en place. Si cela échoue complètement, vous pourriez être dans une machine virtuelle. Mais vous pourriez tout aussi bien être sur une boîte qui n'a pas de matériel compatible avec VM.
Il y a beaucoup de code pour détecter si vous êtes dans un VM ou pas. Commencez par pilule rouge et recherchez à partir de là. Ce document à Informatique offensive est également une bonne lecture.
C'est si aucun de ces plus faciles ne fonctionne :)
Pour Linux, vous tapez dmesg |grep DMI
:
[root @ myhost ~] # dmesg | grep DMI DMI 2.3 présent. DMI: Microsoft Corporation Virtual Machine/Virtual Machine, BIOS 090006 23/05/2012 [root @ myhost ~] # dmesg | grep -i virtual DMI: Microsoft Corporation Virtual Machine/Virtual Machine, BIOS 090006 23/05/2012 Démarrage du noyau paravirtualisé sur le matériel nu entrée: émulation du bouton de la souris Macintosh en tant que /devices/virtual/input/input1[.____. E5Escsi 0: 0: 0: 0: disque virtuel Msft à accès direct 1.0 PQ: 0 ANSI: 4 entrée: souris compatible Microsoft Vmbus HID en tant que /devices/virtual/input/input4
[root @ backdev1 ~] # dmesg | grep DMI DMI 2.5 présent. DMI: IBM System x3650 M3 - [7945AC1] -/90Y4784, BIOS - [D6E153AUS-1.12 ] - 30/06/2011
Vous pouvez également rechercher la première partie de votre adresse mac ici et voir si elle est répertoriée comme affectée à l'une des sociétés de virtualisation.
Les périphériques virtuels seront également révélés par lspci et/ou les informations sur les périphériques de disque dans/proc:
lspci | grep -i vmware
grep -i vmware /proc/scsi/scsi /proc/ide/*/model
Sous Linux, les informations système sont révélées dans/sys/devices/virtual/dmi/id /. Voir ma réponse ici pour un script pratique pour vous montrer toutes les informations disponibles.
racine non requise.
Cela a mieux fonctionné pour moi car il me donne des informations spécifiques sur le fabricant et le nom du produit.
dmidecode -t system|grep 'Manufacturer\|Product'
Sortie sur serveur Dell:
Manufacturer: Dell Inc.
Product Name: PowerEdge C5220
Sortie sur Virtualbox VM:
Manufacturer: innotek GmbH
Product Name: VirtualBox
Sortie sur KVM/QEMU:
Manufacturer: QEMU
Product Name: Standard PC (i440FX + PIIX, 1996)
C'est très bien pour les scripts qui peuvent les analyser pour une meilleure identification des serveurs ... mais si vous utilisez Chef dans votre infrastructure, vous pouvez vérifier l'attribut de nœud Virtualization -> system
sur le serveur du chef.
Je n'ai aimé aucune de ces solutions, car il y a généralement un pilote de CD-ROM VMware ou un pilote de mémoire installé, donc dmesg le confirme ou le refuse rapidement pour moi.
[serveur @ utilisateur ~] $ dmesg | grep VMware hda: VMware Virtual IDE CDROM Drive, ATAPI CD/DVD-ROM drive Fournisseur: VMware Model: Virtual disk Rev: 1.0 Vendor: VMware Model: Virtual disk Rev: 1.0 Vendor: VMware Model: Virtual disk Rev: 1.0 Vendor: VMware Model: Disque virtuel Rév: 1.0 Fournisseur: Modèle VMware: Disque virtuel Rév: 1.0 Fournisseur: Modèle VMware: Disque virtuel Rév: 1.0 Fournisseur: Modèle VMware: Disque virtuel Rév: 1.0 Pilote de contrôle de mémoire VMware initialisé
J'aime beaucoup:
hostnamectl status
ou béton:
hostnamectl status | grep "Chassis:"
Comment vérifier si un système Linux est une machine physique ou virtuelle
16 méthodes pour vérifier si un système Linux est une machine physique ou virtuelle