23

Я запускаю свой экземпляр Ubuntu из Virtual Box в фоновом режиме, используя следующую команду:

VBoxManage startvm ${VM_NAME} --type headless

Основное различие между этим и выполнением его через графический интерфейс состоит в том, что, когда я нахожусь в графическом интерфейсе после его запуска, я могу проверить ifconfig чтобы увидеть, каков IP-адрес, чтобы я мог подключиться к нему через ssh со своего терминала на хосте и, очевидно, не могу сделать это в фоновом режиме.

Предполагая динамическое назначение IP-адресов в сети, есть ли способ извлечь назначенный IP-адрес во вновь созданный экземпляр для целей ssh ИЛИ есть ли способ подключиться к нему по ssh, не зная IP (например, через задний порт на хосте?)?

6 ответов6

13

Вы можете использовать команду VBoxManage для извлечения IP-адреса, как показано в этом сообщении на форуме на virtualbox.org:

VBoxManage guestproperty enumerate <vmname>

Если, конечно, у вас нет веских причин, вам стоит рассмотреть возможность назначения статического IP-адреса вашему гостевому виртуальному компьютеру. Это возможно, даже если вы, вероятно, используете DHCP. Просто выберите IP-адрес вне диапазона, который выделяет ваш DHCP-сервер.

7

Прежде всего убедитесь, что вы установили VirtualBox Extension Pack или установите его, если нет.

Например (для 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

или из

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

После этого вы можете получить IP ВМ

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}'
5

Я знаю, что опоздал на эту вечеринку, но это будет работать с VirtualBox 5.0.6.

При этом используется VBoxManage, чтобы получить список запущенных виртуальных машин, запросить их свойства в цикле и красиво отобразить IP-адреса.

#!/bin/bash

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

Вы можете посмотреть таблицу DHCP в маршрутизаторе, до запуска и после, и сравнить их. Если маршрутизатор отображает имя компьютера, это, конечно, делает его намного проще. Возможно, это не изощренное решение, но оно работает.

0

У меня была похожая задача в питоне. Возможно, это будет полезно.

pip install pyvbox

а потом в питоне:

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
-4
VMNAME="..."; # save ID of VM  in VMNAME variable
vboxmanage guestproperty enumerate $VM_NAME|grep IP|cut -f2 -d,|cut -f2 -d:

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .