VirtualBox headless:为什么我无法获取 guestproperty 网络地址?

VirtualBox headless:为什么我无法获取 guestproperty 网络地址?

我在 VirtualBox 客户端上安装了 Ubuntu Desktop 14.04 (Trusty)(桥接网络连接,安装了 Guest Additions)。我有时会以无头模式运行客户端(而不是通过 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 客户端的 guestproperties 如下:

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 GUI 启动客户端,登录并输入ifconfig以获取地址,关闭它,然后再次以无头模式启动它,但我更愿意避免这样做。如何从无头 Trusty VirtualBox 客户端获取网络地址?

答案1

  1. 找到您要获取地址的网络接口的 mac 地址。您可以使用ifconfig或我认为它在虚拟接口的机器配置中列出。

  2. 从主机(或你用于 ssh 的任何机器)安装arp 扫描... sudo apt-get install arp-scanarp-scan 列出网络上的所有 mac 和 ip 地址对。

  3. 然后运行 ​​arp-scan 并 grep 出你想要的 mac 地址的命令看起来类似于

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

如果您有多个接口,则可能必须指定一个接口--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 屏幕上等待(在预览中可见)造成的。通过 GUI 启动一次(以获取登录屏幕),停止它,然后无头启动它似乎可以工作。

我猜想它会在内核或 Guest Additions 更新后等待 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

它显示所有连接到 LAN 的设备,如果设备很少,就很容易知道您的虚拟机 IP。

相关内容