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)?
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.
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}'
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
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.
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