VirtualBox headless: Por que não consigo obter o endereço de rede guestproperty?

0

Instalei o Ubuntu Desktop 14.04 (Trusty) em um cliente VirtualBox (conexão de rede em ponte, Guest Additions instalado). Às vezes, executo o cliente no modo sem cabeça (em vez de usar a GUI do VirtualBox) e o acesso via SSH. Para iniciar um cliente desse tipo e obter seu endereço de rede, normalmente:

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"

Isso funciona para a maioria dos clientes (Debian, Windows, não me lembro se funcionou para o meu cliente Ubuntu 13.10). Se isso falhar, posso solicitar todos os detalhes, mas mesmo aqui o endereço de rede não aparece.

VBoxManage guestproperty enumerate <VM_NAME>

As minhas propriedades do cliente 14.04 são as seguintes:

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: 

Minha solução é iniciar o cliente com a GUI do VBox, efetuar login e digitar ifconfig para obter o endereço, encerrá-lo e iniciá-lo novamente sem cabeça, mas prefiro evitar isso. Como posso obter o endereço de rede de um cliente Trusty VirtualBox sem cabeça?

    
por d3vid 13.06.2014 / 12:09

3 respostas

0

Isto parece ser causado pela máquina iniciar e aguardar na tela do GNU GRUB (visível na pré-visualização). Iniciá-lo através da GUI uma vez (para obter a tela de login), pará-lo e iniciá-lo sem cabeça parece funcionar.

Suponho que aguarde no GRUB após uma atualização do kernel ou do Guest Additions. (Mas não tenho certeza.)

    
por d3vid 13.06.2014 / 15:25
2
  1. Encontre o endereço MAC da interface de newtworking para a qual você deseja obter o endereço. Você pode fazer isso usando ifconfig ou acho que está listado na configuração da máquina para a interface virtual.

  2. Do host (ou da máquina que você está usando no ssh) instale o arp-scan . %código%. O arp-scan lista todos os pares de endereços mac e ip na rede.

  3. Em seguida, o comando para executar arp-scan e grep para fora do endereço MAC que você deseja pareceria algo como

sudo apt-get install arp-scan

Você pode ter que especificar uma interface se tiver mais de 1 %código%. E sua rede e sub-rede podem ser diferentes.

Agora, para crédito extra, você pode usar sudo arp-scan 10.253.0.0/24 | grep -i <mac address> para extrair apenas o endereço IP e reunir seu comando ssh e fazer tudo em um pequeno script.

Isso é o que eu faria.

pseudocódigo:

start vm
sleep 1 min
ip=$(apr-scan | grep | awk print $2)
echo $ip
ssh <user>@$ip
    
por dan08 13.06.2014 / 15:03
0

O problema com a abordagem arp é - você precisa inicializar a comunicação TCP / IP ou UDP com a caixa antes de encontrá-la na tabela arp do sistema.

Então você tem que saber o IP;) - problema de galinha e ovo.

No entanto, este caminho deve funcionar:

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   
    
por Greg 07.02.2017 / 16:36