
我使用以下命令在後台從 Virtual Box 運行我的 Ubuntu 實例:
VBoxManage startvm ${VM_NAME} --type headless
它與透過 GUI 運行它之間的主要區別在於,當我啟動後進入 GUI 時,我可以檢查ifconfig
IP 位址是什麼,以便我可以ssh
從主機上的終端進入它,顯然可以在後台這樣做。
假設網路上動態分配 IP 位址,有沒有辦法將分配的 IP 提取到新建立的實例以用於 ssh 目的,或者有沒有辦法在不知道 IP 的情況下 ssh 進入它(例如透過主機上的後門連接埠) )?
答案1
您可以使用VBoxManage命令來提取IP位址,如圖所示這個論壇貼文在 virtualbox.org 上:
VBoxManage guestproperty enumerate <vmname>
不過,除非您有充分的理由,否則您將強烈考慮為您的來賓虛擬機器分配靜態 IP 位址。即使您可能使用 DHCP,這也是可能的。只需選擇 DHCP 伺服器分配範圍之外的 IP 位址即可。
答案2
首先確保您已經安裝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
或來自
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}'
答案3
您無需安裝 Guest Addition 即可完成此操作
但您需要了解您的網絡,
例如,我們有一個帶有兩個適配器的虛擬機
一個用於互聯網通信,
第二個用於僅主機通信
您可以使用指令查看網絡VBox管理列表
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[電子郵件受保護] [電子郵件受保護]的密碼: 最後登入:2020 年 7 月 13 日星期一 09:05:33 [root@node0 ~]#
答案4
這就是我的做法,無論是手工還是在 ansible 中。 「/Net/0/」是第一個網路接口,「/Net/1/」是第二個網路接口,依此類推。
IPv4版本
VBoxManage guestproperty get <uuid|vmname> "/VirtualBox/GuestInfo/Net/0/V4/IP" | sed -e 's/Value: //g'
IPV6版本
VBoxManage guestproperty get <uuid|vmname> "/VirtualBox/GuestInfo/Net/0/V6/IP" | sed -e 's/Value: //g'
放入一個簡單的腳本中:
#!/bin/sh
for VM in $(VBoxManage list runningvms | awk -F\{ '{print $2}' | sed -e 's/}//g');
do {
VMNAME="$(VBoxManage showvminfo ${VM} --machinereadable | awk -F\= '/^name/{print $2}')"
VMIP=$(VBoxManage guestproperty get ${VM} "/VirtualBox/GuestInfo/Net/0/V4/IP" | sed -e 's/Value: //g')
printf "VM-IP: %-16s VM-Name: %-50s\n" "${VMIP}" "${VMNAME}"
} done
它提供與所有正在運行的虛擬機器類似的輸出:
VM-IP: 10.13.172.82 VM-Name: "Ansible Lab VM1 Master"
VM-IP: 10.13.172.84 VM-Name: "Ansible Lab VM2 Slave CentOS"
VM-IP: 10.13.172.83 VM-Name: "Ansible Lab VM3 Slave Win10"
...etc
注意:需要安裝 Guest Additions。