如何获取分配给在后台运行的虚拟机的 IP 地址?

amp*_*ent 35 virtualbox

我使用以下命令在后台从 Virtual Box 运行我的 Ubuntu 实例:

VBoxManage startvm ${VM_NAME} --type headless

这与通过 GUI 运行它之间的主要区别在于,当它启动后我在 GUI 中时,我可以检查ifconfigIP 地址是什么,以便我可以ssh从主机上的终端进入它,显然可以'不要在后台这样做。

假设在网络上动态分配 IP 地址,有没有办法将分配的 IP 提取到新创建的实例以用于 ssh 目的,或者有没有办法在不知道 IP 的情况下通过 ssh 进入它(例如,通过主机上的后门端口) )?

Chr*_*ton 21

您可以使用 VBoxManage 命令提取 IP 地址,如virtualbox.org 上的此论坛帖子所示:

VBoxManage guestproperty enumerate <vmname>
Run Code Online (Sandbox Code Playgroud)

但是,除非您有很好的理由,否则您会强烈考虑为您的来宾虚拟机分配一个静态 IP 地址。即使您可能正在使用 DHCP,这也是可能的。只需选择 DHCP 服务器分配的范围之外的 IP 地址。

  • 该命令没有返回 IP 地址 (15认同)
  • 您需要安装来宾添加才能使其正常工作。 (3认同)

小智 10

首先确保你已经安装了VirtualBox 扩展包,如果没有,请安装它。

例如(对于 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
Run Code Online (Sandbox Code Playgroud)

或来自

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

之后,您可以获得VM的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}'
Run Code Online (Sandbox Code Playgroud)

  • 仍然没有为我显示 IP (7认同)

小智 9

您无需安装 Guest Addition 即可完成此操作

但您需要了解您的网络
,例如,我们有带有两个适配器的虚拟机
两个网络适配器

一个用于互联网通信,
第二个用于仅主机通信

您可以使用命令VBoxManage list查看网络

NAT网络:

% VBoxManage 列出 natnet
网络名称:NatNetwork
IP:10.10.12.1
网络:10.10.12.0/24
启用 DHCP:是
启用:是

仅主机网络

% VBoxManage 列出主机唯一的ifs
名称: vboxnet0
DHCP:禁用
IP地址:192.168.6.1
网络掩码:255.255.255.240

这是主要部分
显示正在运行的虚拟机

% vboxmanage 列出正在运行的虚拟机
“centos7节点0 ip测试”{46ec9075-f49b-4d16-9867-d56710b6a3da}

我们需要VM uuid,
它是46ec9075-f49b-4d16-9867-d56710b6a3da

现在我们可以获取 MAC 地址

% vboxmanage showvminfo --详细信息 46ec9075-f49b-4d16-9867-d56710b6a3da | fgrep MAC
NIC 1:MAC:08002783E8BB,附件:NAT 网络“NatNetwork”,电缆已连接:打开,跟踪:关闭(文件:无),类型:82540EM,报告速度:0 Mbps,启动优先级:0,Promisc 策略:拒绝,带宽组别:无
NIC 2:MAC:080027D992F0,附件:仅主机接口“vboxnet0”,已连接电缆:打开,跟踪:关闭(文件:无),类型:82540EM,报告速度:0 Mbps,启动优先级:0,Promisc 策略:拒绝, 带宽组: 无

08002783E8BB 用于“NatNetwork”网络
中的第一个适配器 080027D992F0 用于“vboxnet0”接口的第二个适配器

现在我们可以从 DHCP 表中获取第一个适配器的 IP

% vboxmanage dhcpserver findlease --network NatNetwork --mac-address=08002783E8BB
IP地址:10.10.12.4                     
MAC 地址:08:00:27:83:e8:bb
状态:已确认
发布时间:2020-07-13T13:31:20Z (1594647080)
过期: 2020-07-13T13:41:20Z (1594647680)
TTL:600 秒,目前还剩 586 秒

第二个

% vboxmanage dhcpserver findlease --interface vboxnet0 --mac-address=080027D992F0
IP地址:192.168.6.3
MAC 地址:08:00:27:d9:92:f0
状态:已确认
发布时间: 2020-07-13T13:29:06Z (1594646946)
过期: 2020-07-13T13:39:06Z (1594647546)
TTL:600 秒,目前还剩 399 秒

请注意,
对于 nat 网络,我们使用选项 --network
对于仅主机适配器,我们使用选项 --interface

现在我们通过 ssh 从主机连接到该虚拟机

% ssh root@192.168.6.3
root@192.168.6.3 的密码:
最后登录:2020 年 7 月 13 日星期一 09:05:33
[root@node0 ~]#


小智 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
Run Code Online (Sandbox Code Playgroud)