web-dev-qa-db-fra.com

Comment obtenir une adresse IP assignée à VM s'exécutant en arrière-plan?

J'exécute mon instance Ubuntu à partir de Virtual Box en arrière-plan à l'aide de la commande suivante:

VBoxManage startvm ${VM_NAME} --type headless

La principale différence entre cela et le fonctionnement via l'interface graphique est que, lorsque je suis dans l'interface graphique après son démarrage, je peux vérifier ifconfig pour voir quelle est l'adresse IP afin que je puisse ssh à partir de mon terminal sur l'hôte et, bien entendu, ne peut pas faire ça en arrière-plan.

En supposant une attribution dynamique d’adresses IP sur le réseau, existe-t-il un moyen d’extraire l’adresse IP attribuée à la nouvelle instance créée à des fins ssh OR existe-t-il un moyen d’y insérer SSH sans connaître l’adresse IP (par exemple, via un port de porte dérobée sur l'hôte)?

25
amphibient

Vous pouvez utiliser la commande VBoxManage pour extraire l'adresse IP, comme indiqué dans ce message sur le forum sur virtualbox.org:

VBoxManage guestproperty enumerate <vmname>

À moins que vous n’ayez de très bonnes raisons, vous voudrez certainement envisager d’attribuer une adresse IP statique à votre machine virtuelle invitée. Cela est possible même si vous utilisez probablement DHCP. Il suffit de choisir une adresse IP en dehors de la plage attribuée par votre serveur DHCP.

13
ChrisInEdmonton

Tout d’abord, assurez-vous d’avoir installé VirtualBox Extension Pack ou l’installez sinon.

Par exemple (pour Ubuntu)

> wget http://download.virtualbox.org/virtualbox/4.2.12/Oracle_VM_VirtualBox_Extension_Pack-4.2.12-84980.vbox-extpack
> Sudo VBoxManage extpack install ./Oracle_VM_VirtualBox_Extension_Pack-4.2.12-84980.vbox-extpack

ou de

https://www.virtualbox.org/wiki/Downloads

Après cela, vous pouvez obtenir l'adresse IP de la machine virtuelle.

VBoxManage guestproperty enumerate <_name_of_VM_> | grep IP | grep -o -w -P -e '\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}'
8
weivall

Je sais que je suis en retard à cette fête, mais cela fonctionnera avec VirtualBox 5.0.6.

Cela utilise VBoxManage pour récupérer une liste de machines virtuelles en cours d’exécution, interroge leurs propriétés dans une boucle et affiche les adresses IP de manière élégante.

#!/bin/bash

for f in $(VBoxManage list runningvms | awk -F\" '{print $2}'); do
      echo "$f:"
      VBoxManage guestproperty enumerate "$f" | grep IP
    done
5
Dan Stynchula

Vous pouvez consulter la table DHCP du routeur, avant et après le démarrage, et les comparer. Si le routeur affiche le nom de l'ordinateur, cela facilite bien sûr les choses. Ce n'est peut-être pas une solution sophistiquée, mais cela fonctionne.

0
SPRBRN

J'avais une tâche similaire en python. Ce serait probablement utile.

pip install pyvbox

puis en python:

import virtualbox

vbox = virtualbox.VirtualBox()
vm = vbox.find_machine('running_vb_machine_name')
res = vm.enumerate_guest_properties('/VirtualBox/GuestInfo/Net/0/V4/IP')
ip = res[1][0]
print ip
0
Roman