
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 ifconfig
qual é o endereço IP para poder ssh
acessá-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
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.