Como obter o endereço IP atribuído à VM em execução em segundo plano?

Como obter o endereço IP atribuído à VM em execução em segundo plano?

Eu executo minha instância do Ubuntu no Virtual Box em segundo plano usando o seguinte comando:

VBoxManage startvm ${VM_NAME} --type headless

A principal diferença entre isso e executá-lo através da GUI é que, quando estou na GUI depois de iniciada, posso verificar ifconfigqual é o endereço IP para poder sshacessá-lo a partir do meu terminal no host e, obviamente, posso ' Não faça isso em segundo plano.

Assumindo uma atribuição dinâmica de endereços IP na rede, existe uma maneira de extrair o IP atribuído à instância recém-criada para fins de ssh OU existe uma maneira de fazer ssh nela sem conhecer o IP (por exemplo, através de uma porta backdoor no host )?

Responder1

Você pode usar o comando VBoxManage para extrair o endereço IP, conforme mostrado emesta postagem no fórumem virtualbox.org:

VBoxManage guestproperty enumerate <vmname>

A menos que você tenha bons motivos, você deve considerar fortemente a atribuição de um endereço IP estático à sua VM convidada. Isso é possível mesmo que você provavelmente esteja usando DHCP. Basta escolher um endereço IP fora do intervalo alocado pelo seu servidor DHCP.

Responder2

Primeiro, certifique-se de ter instaladoPacote de extensão VirtualBoxou instale-o se não.

Por exemplo (para 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

ou de

https://www.virtualbox.org/wiki/Downloads

Depois disso você pode obter o IP da VM

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}'

Responder3

Você pode fazer isso sem instalar o Guest Addition

Mas você precisa conhecer suas redes
por exemplo, temos VM com dois adaptadores
dois adaptadores de rede

um para comunicação pela Internet,
segundo para comunicação somente com host

você pode ver a rede com o comandoLista VBoxManage

rede nativa:

% VBoxManage lista natnets
Nome da rede: NatNetwork
IP: 10.10.12.1
Rede: 10.10.12.0/24
DHCP habilitado: Sim
Habilitado: Sim

rede somente host

% Lista VBoxManage hostonlyifs
Nome: vboxnet0
DHCP: Desativado
Endereço IP: 192.168.6.1
Máscara de rede: 255.255.255.240

aqui está a parte principal
mostrando VMs em execução

% lista vboxmanage executandovms
"teste de ip centos7 node0" {46ec9075-f49b-4d16-9867-d56710b6a3da}

precisamos do VM uuid,
é 46ec9075-f49b-4d16-9867-d56710b6a3da

agora podemos buscar endereços MAC

% vboxmanage showvminfo --detalhes 46ec9075-f49b-4d16-9867-d56710b6a3da | fgrep MAC
NIC 1: MAC: 08002783E8BB, Anexo: Rede NAT 'NatNetwork', Cabo conectado: ligado, Rastreamento: desligado (arquivo: nenhum), Tipo: 82540EM, Velocidade relatada: 0 Mbps, Prioridade de inicialização: 0, Política Promisc: negar, Largura de banda grupo: nenhum
NIC 2: MAC: 080027D992F0, Anexo: Interface somente host 'vboxnet0', Cabo conectado: ligado, Rastreamento: desligado (arquivo: nenhum), Tipo: 82540EM, Velocidade relatada: 0 Mbps, Prioridade de inicialização: 0, Política Promisc: negar , Grupo de largura de banda: nenhum

08002783E8BB para o primeiro adaptador em 'NatNetwork'rede
080027D992F0 para segundo adaptador para 'vboxnet0'interface

agora podemos obter o IP da tabela DHCP para o primeiro adaptador

% vboxmanage dhcpserver findlease --network NatNetwork --mac-address=08002783E8BB
Endereço IP: 10.10.12.4                     
Endereço MAC: 08:00:27:83:e8:bb
Estado: Acked
Emitido: 2020-07-13T13:31:20Z (1594647080)
Expiração: 13/07/2020T13:41:20Z (1594647680)
TTL: 600 segundos, atualmente restam 586 segundos

e por segundo

% vboxmanage dhcpserver findlease --interface vboxnet0 --mac-address=080027D992F0
Endereço IP: 192.168.6.3
Endereço MAC: 08:00:27:d9:92:f0
Estado: Acked
Emitido: 2020-07-13T13:29:06Z (1594646946)
Expiração: 13/07/2020T13:39:06Z (1594647546)
TTL: 600 segundos, atualmente restam 399 segundos

observe que
para rede nat usamos a opção --network
para adaptador somente host usamos a opção --interface

agora nos conectamos a esta VM do host por ssh

% ssh[e-mail protegido]
[e-mail protegido]senha de:
Último login: segunda-feira, 13 de julho 09:05:33 2020
[raiz@node0 ~]#

Responder4

É assim que eu faço, tanto manualmente quanto em ansible. O "/Net/0/" é a primeira interface de rede, "/Net/1/" a segunda, etc. O "/V4/" é para IPv4 e "/V6/" é IPv6.

Versão IPv4

VBoxManage guestproperty get <uuid|vmname> "/VirtualBox/GuestInfo/Net/0/V4/IP" | sed -e 's/Value: //g'

Versão IPV6

VBoxManage guestproperty get <uuid|vmname> "/VirtualBox/GuestInfo/Net/0/V6/IP" | sed -e 's/Value: //g'

Coloque em um script simples:

#!/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

Que fornece uma saída semelhante a esta de todas as VMs em execução:

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

Nota: Requer a instalação do Guest Additions.

informação relacionada