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?
Supposez également que les vmtools ne sont pas installés.
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?
Supposez également que les vmtools ne sont pas installés.
Réponses:
Utilisez les outils Linux standard pour inspecter le matériel sur le système.
cat /proc/scsi/scsi
ou
ethtool -i eth0
ou
dmidecode | grep -i vmware
Si la sortie de ces commandes indique du matériel portant le nom de fabricant "VMWare", vous êtes sur une machine virtuelle VMWare. Plusieurs commandes sont fournies ici car la configuration du système et les outils diffèrent.
cat /proc/scsi/scsi
C'est bien, car il semble être disponible partout et ne nécessite pas d'installer un nouveau logiciel ou de fonctionner avec des droits privilégiés.
/proc/scsi/scsi
sur ma boîte Debian 7 ...
man virt-what
pour le script heuristique construit à cette fin de détection (pour les systèmes RedHat / Fedora) et pour les mises en garde impliquées.
facter virtual
xenu
indique qu'il s'agit d'une machine virtuelle. Si elle est retournée «physique», l'inverse est vrai (pas une VM), par exemple:
facter virtual
Physical
Vous pourriez peut-être avoir une idée en regardant autour de vous /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 attribuent des noms un peu révélateurs à certains de leurs périphériques virtuels, par exemple VirtualBox présentant une carte graphique qui s'appelle elle-même "Adaptateur d'affichage VirtualBox". Mais rechercher ces liens vous lie à une machine virtuelle particulière et éventuellement à un nombre réduit de versions.
Votre code pourrait peut-être voir quel type de virtualisation il pourrait mettre en place. Si cela échoue complètement, vous pourriez être dans une VM. Mais vous pourriez aussi facilement être sur une boîte qui n’a aucun matériel capable de VM.
Pour Linux, vous tapez dmesg |grep DMI
:
[root @ myhost ~] # dmesg | grep DMI DMI 2.3 présent. DMI: Machine virtuelle Microsoft Corporation / Machine virtuelle, BIOS 090006 23/05/2012 [root @ myhost ~] # dmesg | grep -i virtuel DMI: Machine virtuelle Microsoft Corporation / Machine virtuelle, BIOS 090006 23/05/2012 Lancement du noyau paravirtualisé sur du matériel nu input: émulation du bouton de la souris Macintosh sous / devices / virtual / input / input1 SCSI 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] - le 30/06/2011
Il y a beaucoup de code pour détecter si vous êtes dans une VM ou non. Commencez avec la pilule rouge et cherchez à partir de là. Cet article chez Offensive Computing est également une bonne lecture.
C'est si aucune de ces choses faciles ci-dessus ne fonctionne :)
Vous pouvez également rechercher la première partie de votre adresse MAC ici et voir si elle est répertoriée comme étant attribuée à l'une des sociétés de virtualisation.
Je n'aimais 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 me le confirme ou le refuse rapidement.
[serveur @ utilisateur ~] $ dmesg | grep VMware hda: lecteur de CD-ROM VMware Virtual IDE, lecteur de CD / DVD-ROM ATAPI Fournisseur: VMware Modèle: Disque virtuel Rév: 1.0 Fournisseur: VMware Modèle: Disque virtuel Rév: 1.0 Fournisseur: VMware Modèle: Disque virtuel Rév: 1.0 Fournisseur: VMware Modèle: Disque virtuel Rév: 1.0 Fournisseur: VMware Modèle: Disque virtuel Rév: 1.0 Fournisseur: VMware Modèle: Disque virtuel Rév: 1.0 Fournisseur: VMware Modèle: Disque virtuel Rév: 1.0 Pilote de contrôle de la mémoire VMware initialisé
Cela a mieux fonctionné pour moi car cela me donne des informations spécifiques sur le fabricant et le nom du produit.
dmidecode -t system|grep 'Manufacturer\|Product'
Sortie sur le serveur Dell:
Manufacturer: Dell Inc.
Product Name: PowerEdge C5220
Sortie sur la machine virtuelle Virtualbox:
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 du nœud Virtualization -> system
dans le serveur Chef.
J'aime beaucoup:
hostnamectl status
ou concret:
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