
Я установил Ubuntu Desktop 14.04 (Trusty) на клиенте VirtualBox (мостовое сетевое соединение, установлены гостевые дополнения). Иногда я запускаю клиент в режиме headless (а не через 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 следующие:
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, войти в систему и ввести ifconfig
адрес, выключить его и запустить снова без headless, но я бы предпочел этого избежать. Как получить сетевой адрес из клиента Trusty VirtualBox без headless?
решение1
Найдите mac-адрес для нового интерфейса, для которого вы хотите получить адрес. Вы можете сделать это с помощью
ifconfig
или, я думаю, он указан в конфигурации машины для виртуального интерфейса.С хоста (или с любой другой машины, которую вы используете для ssh) установитеarp-сканирование.
sudo apt-get install arp-scan
. arp-scan выводит список всех пар MAC- и IP-адресов в сети.Тогда команда для запуска arp-scan и получения нужного вам MAC-адреса будет выглядеть примерно так:
sudo arp-scan 10.253.0.0/24 | grep -i <mac address>
Возможно, вам придется указать интерфейс, если у вас их больше 1, например --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 (видимом в Preview). Запуск ее через 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, чтобы узнать ваш_ip
- используйте nmap nmap -sn ваш_ip/24
он показывает все устройства, подключенные к локальной сети. Если их несколько, легко узнать IP-адрес вашей виртуальной машины.