VirtualBox headless: почему я не могу получить сетевой адрес guestproperty?

VirtualBox headless: почему я не могу получить сетевой адрес guestproperty?

Я установил Ubuntu Desktop 14.04 (Trusty) на клиенте VirtualBox (мостовое сетевое соединение, установлены гостевые дополнения). Иногда я запускаю клиент в режиме headless (а не через VirtualBox GUI) и получаю к нему доступ через SSH. Чтобы запустить такой клиент и получить его сетевой адрес, я обычно:

nohup VBoxHeadless --startvm <VM_NAME> & #start as background process
#wait a bit for it to start up
VBoxManage guestproperty get <VM_NAME> "/VirtualBox/GuestInfo/Net/0/V4/IP"

Это работает для большинства клиентов (Debian, Windows, я не помню, работало ли это для моего клиента Ubuntu 13.10). Если это не сработает, я могу запросить все детали, но даже здесь сетевой адрес не появляется.

VBoxManage guestproperty enumerate <VM_NAME>

Мои гостевые свойства для клиента 14.04 следующие:

Name: /VirtualBox/GuestInfo/OS/Product, value: Linux, timestamp: 1402485749624026000, flags: 
Name: /VirtualBox/HostInfo/GUI/LanguageID, value: en_US, timestamp: 1402652779530499000, flags: 
Name: /VirtualBox/HostInfo/VBoxVerExt, value: 4.3.12, timestamp: 1402652779119725000, flags: TRANSIENT, RDONLYGUEST
Name: /VirtualBox/GuestAdd/Vbgl/Video/SavedMode, value: 1366x722x32, timestamp: 1402485750186131000, flags: 
Name: /VirtualBox/GuestInfo/OS/Version, value: #53-Ubuntu SMP Wed Jun 4 21:02:19 UTC 2014, timestamp: 1402485749625558000, flags: 
Name: /VirtualBox/GuestAdd/VersionExt, value: 4.3.12, timestamp: 1402485749627827000, flags: 
Name: /VirtualBox/GuestAdd/Revision, value: 93733, timestamp: 1402485749628338000, flags: 
Name: /VirtualBox/HostGuest/SysprepExec, value: , timestamp: 1402652779118360000, flags: TRANSIENT, RDONLYGUEST
Name: /VirtualBox/HostGuest/SysprepArgs, value: , timestamp: 1402652779118595000, flags: TRANSIENT, RDONLYGUEST
Name: /VirtualBox/GuestAdd/Version, value: 4.3.12, timestamp: 1402485749627214000, flags: 
Name: /VirtualBox/HostInfo/VBoxRev, value: 93733, timestamp: 1402652779119840000, flags: TRANSIENT, RDONLYGUEST
Name: /VirtualBox/HostInfo/VBoxVer, value: 4.3.12, timestamp: 1402652779119633000, flags: TRANSIENT, RDONLYGUEST
Name: /VirtualBox/GuestInfo/OS/Release, value: 3.13.0-29-generic, timestamp: 1402485749624971000, flags: 
Name: /VirtualBox/GuestAdd/HostVerLastChecked, value: 4.3.12, timestamp: 1402485781945719000, flags: 

Мой обходной путь — запустить клиент с графическим интерфейсом VBox, войти в систему и ввести ifconfigадрес, выключить его и запустить снова без headless, но я бы предпочел этого избежать. Как получить сетевой адрес из клиента Trusty VirtualBox без headless?

решение1

  1. Найдите mac-адрес для нового интерфейса, для которого вы хотите получить адрес. Вы можете сделать это с помощью ifconfigили, я думаю, он указан в конфигурации машины для виртуального интерфейса.

  2. С хоста (или с любой другой машины, которую вы используете для ssh) установитеarp-сканирование. sudo apt-get install arp-scan. arp-scan выводит список всех пар MAC- и IP-адресов в сети.

  3. Тогда команда для запуска arp-scan и получения нужного вам MAC-адреса будет выглядеть примерно так:

sudo arp-scan 10.253.0.0/24 | grep -i <mac address>

Возможно, вам придется указать интерфейс, если у вас их больше 1, например --interface=eth0. И ваша сеть и подсеть могут отличаться.

Теперь для дополнительного успеха вы можете awkпросто извлечь IP-адрес и составить свою команду ssh, и все будет сделано в одном небольшом скрипте.

Вот что бы я сделал.

псевдокод:

start vm
sleep 1 min
ip=$(apr-scan | grep | awk print $2)
echo $ip
ssh <user>@$ip

решение2

Похоже, это вызвано тем, что машина запускается и ждет на экране GNU GRUB (видимом в Preview). Запуск ее через GUI один раз (чтобы получить экран входа), остановка и запуск без экрана, похоже, работают.

Я предполагаю, что он ждет в GRUB после обновления ядра или гостевых дополнений. (Но я не уверен.)

решение3

Проблема подхода ARP заключается в том, что вам необходимо инициализировать TCP/IP или UDP-соединение с устройством до того, как найти его в системной таблице ARP.

Так что вам придется знать IP ;) - проблема курицы и яйца.

Однако этот способ должен сработать:

VBoxManage list runningvms 

"some_box_default_1486476025646_64328" {d20b1b0e-a5xf-4afc-94e0-4ea78d70539f}

VboxManage guestproperty get {d20b1b0e-a5xf-4afc-94e0-4ea78d70539f} /VirtualBox/GuestInfo/Net/1/V4/IP

Value: 10.XX.XX.XX

   Net/0  for eth0   Net1 for eth1   

решение4

После безрезультатных поисков я нашел эту статью:https://itsfoss.com/how-to-find-what-devices-are-connected-to-network-in-ubuntu/

в резюме:

  1. используйте ifconfig, чтобы узнать ваш_ip
  2. используйте nmap nmap -sn ваш_ip/24

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

Связанный контент