我需要通过ssh 访问我的一台VirtualBox来宾机,其中主机是远程的,只能通过ssh访问。 客户端configuration了DHCP,因此在每次重新启动时都会更改IP。 有没有任何命令从主机中find每个客机的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
如果您安装了guest虚拟机添加项,当VirtualBox本身分配IP地址(仅NAT /主机模式)时,该IP地址应在Net属性组中可用:
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
如果guest虚拟机和它的networking适配器处于桥接模式,它可能会从您的networking中运行的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 ...
从相关networking接口(在此示例中为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。 请记住,如果没有来往该访客的stream量,则不必查找任何内容,因为相关条目可能会超时。 如果在启动guest虚拟机之后运行此命令,由于guest虚拟机和DHCP服务器之间的DHCP握手,很可能会出现这样的入口。
这应该为你做。
VBoxManage guestproperty get "CHICAGOVPN" "/VirtualBox/GuestInfo/Net/0/V4/IP" | awk '{ print $2 }'