在不知道 IP 地址的情况下通过 SSH 连接到 VirtualBox 来宾 VM

Ajo*_*ine 0 linux ubuntu virtualbox

我需要通过 ssh访问我的一台VirtualBox 来宾机器,其中主机是远程的并且只能通过 ssh 访问。来宾配置了 DHCP,因此每次重新启动时 IP 都会更改。是否有任何命令可以从主机中查找每台来宾机器的 IP?

我使用了以下命令。但它显示的信息有限:

    VBoxManage guestproperty enumerate "CHICAGOVPN"
Name: /VirtualBox/HostInfo/VBoxVerExt, value: 4.1.12_Ubuntu, timestamp: 1379492552119809000, flags: TRANSIENT, RDONLYGUEST
Name: /VirtualBox/HostGuest/SysprepExec, value: , timestamp: 1379492552118930000, flags: TRANSIENT, RDONLYGUEST
Name: /VirtualBox/HostGuest/SysprepArgs, value: , timestamp: 1379492552119058000, flags: TRANSIENT, RDONLYGUEST
Name: /VirtualBox/HostInfo/VBoxRev, value: 77245, timestamp: 1379492552119892000, flags: TRANSIENT, RDONLYGUEST
Name: /VirtualBox/HostInfo/VBoxVer, value: 4.1.12, timestamp: 1379492552119750000, flags: TRANSIENT, RDONLYGUEST
Run Code Online (Sandbox Code Playgroud)

dsm*_*k80 6

如果您安装了来宾添加,则Net当 VirtualBox 本身分配IP 地址时,IP 地址应该在属性组中可用(NAT/仅主机模式):

vboxmanage guestproperty get "VM_NAME" "/VirtualBox/GuestInfo/Net/0/V4/IP"
Run Code Online (Sandbox Code Playgroud)

此命令应返回如下内容:

Value: 192.168.0.54
Run Code Online (Sandbox Code Playgroud)

因此,您可以从中提取地址并将其与 ssh 一起使用:

VM_IP=$(vboxmanage guestproperty get "VM_NAME" "/VirtualBox/GuestInfo/Net/0/V4/IP" | awk '{ print($2); }')
ssh -l USERNAME $VM_IP
Run Code Online (Sandbox Code Playgroud)

如果来宾及其网络适配器处于桥接模式,则它可能从网络中运行的 DHCP 服务器获取 IP 地址(如果未静态设置)并且上述命令不起作用。然后我会尝试在此命令的帮助下从本地 ARP 表(如大卫所提到的)中猜测它:

vboxmanage showvminfo VM_NAME --details
Run Code Online (Sandbox Code Playgroud)

输出:

Name:            VM_NAME
Guest OS:        Ubuntu
UUID:            ff66cb62-f92d-447e-8238-2f76c58bc7bf
...
NIC 1:           MAC: 080027F8A346, Attachment: Internal Network 'intnet', Cable connected: on, Trace: off (file: none), Type: 82540EM, Reported speed: 0 Mbps, Boot priority: 0
NIC 2:           disabled
...
Run Code Online (Sandbox Code Playgroud)

从相关网络接口(在本例中为 NIC 1)获取 MAC 地址:

vboxmanage showvminfo VM_NAME --details 2>&1 | grep 'NIC 1:' | sed -re 's/.*MAC: (.+), Attachment.*/\1/' -e 's/(\w{2})/\1:/g' -e 's/:$//'
Run Code Online (Sandbox Code Playgroud)

输出:

08:00:27:F8:A3:46
Run Code Online (Sandbox Code Playgroud)

最后,检查该 MAC 地址和分配的 IP 的 ARP 表。请记住,如果没有来自/去往该访客的流量,则您无需查找任何内容,因为相关条目可能会超时。如果您在启动来宾后运行此命令,由于来宾和 DHCP 服务器之间的 DHCP 握手,很可能会出现此类条目。