通过 SSH 连接到 VirtualBox 客户虚拟机而无需知道 IP 地址

通过 SSH 连接到 VirtualBox 客户虚拟机而无需知道 IP 地址

我需要使用权我的一个通过 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

答案1

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

vboxmanage guestproperty get "VM_NAME" "/VirtualBox/GuestInfo/Net/0/V4/IP"

该命令应返回如下内容:

Value: 192.168.0.54

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

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

如果客户机及其网络适配器处于桥接模式,它可能会从网络中运行的 DHCP 服务器获取 IP 地址(如果不是静态设置),并且上述命令不起作用。然后,我会尝试借助以下命令从本地 ARP 表中猜测它(如 David 所述):

vboxmanage showvminfo VM_NAME --details

输出:

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
...

从相关网络接口(此示例中为 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/:$//'

输出:

08:00:27:F8:A3:46

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

答案2

这应该可以帮你解决。

VBoxManage guestproperty get "CHICAGOVPN" "/VirtualBox/GuestInfo/Net/0/V4/IP" | awk '{ print $2 }'

相关内容