
我已在 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
找到您想要取得其位址的新網路介面的 MAC 位址。您可以使用
ifconfig
或我認為它在虛擬介面的計算機配置中列出來執行此操作。從主機(或您用於 ssh 的任何機器)安裝arp 掃描。
sudo apt-get install arp-scan
。 arp-scan 列出網路上的所有 MAC 和 IP 位址對。然後運行 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 啟動它一次(以獲取登入畫面),停止它,然後無頭啟動它似乎可行。
我猜它會在內核或來賓添加更新後在 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/
在簡歷中:
- 使用 ifconfig 來了解 your_ip
- 使用 nmap nmap -sn your_ip/24
它顯示了連接到 LAN 的所有設備,如果很少很容易知道您的 VM IP。