
Ejecuto mi instancia de Ubuntu desde Virtual Box en segundo plano usando el siguiente comando:
VBoxManage startvm ${VM_NAME} --type headless
La principal diferencia entre eso y ejecutarlo a través de la GUI es que, cuando estoy en la GUI después de que se inicia, puedo verificar ifconfig
cuál es la dirección IP para poder ssh
ingresar desde mi terminal en el host y obviamente puedo. No hagas eso en segundo plano.
Suponiendo una asignación dinámica de direcciones IP en la red, ¿hay alguna manera de extraer la IP asignada a la instancia recién creada para fines ssh O hay alguna manera de ingresar a ella mediante ssh sin conocer la IP (por ejemplo, a través de un puerto de puerta trasera en el host? )?
Respuesta1
Puede utilizar el comando VBoxManage para extraer la dirección IP, como se muestra enesta publicación en el foroen virtualbox.org:
VBoxManage guestproperty enumerate <vmname>
Sin embargo, a menos que tenga muy buenas razones, deberá considerar seriamente asignar una dirección IP estática a su máquina virtual invitada. Esto es posible aunque probablemente esté utilizando DHCP. Simplemente elija una dirección IP fuera del rango que asigna su servidor DHCP.
Respuesta2
Primero asegúrese de haber instaladoPaquete de extensión de VirtualBoxo instalarlo si no es así.
Por ejemplo (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
o de
https://www.virtualbox.org/wiki/Descargas
Después de eso puedes obtener la IP de la 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}'
Respuesta3
Puedes hacerlo sin instalar Guest Addition
Pero necesitas conocer tus redes
, por ejemplo, tenemos VM con dos adaptadores.
uno para comunicación por Internet
el segundo para comunicación solo con host
puedes ver la red con el comandoLista de administración de VBox
red nacional:
% VBoxManage lista de natnets Nombre de red: NatNetwork IP: 10.10.12.1 Red: 10.10.12.0/24 DHCP habilitado: Sí Habilitado: Sí
red de solo host
% VBoxManage lista hostonlyifs Nombre: vboxnet0 DHCP: deshabilitado Dirección IP: 192.168.6.1 Máscara de red: 255.255.255.240
Aquí está la parte principal
que muestra las máquinas virtuales en ejecución.
% vboxmanage lista ejecutandovms "prueba de IP centos7 nodo0" {46ec9075-f49b-4d16-9867-d56710b6a3da}
necesitamos VM uuid
es 46ec9075-f49b-4d16-9867-d56710b6a3da
ahora podemos obtener direcciones MAC
% vboxmanage showvminfo --detalles 46ec9075-f49b-4d16-9867-d56710b6a3da | MAC NIC 1: MAC: 08002783E8BB, Adjunto: Red NAT 'NatNetwork', Cable conectado: activado, Seguimiento: desactivado (archivo: ninguno), Tipo: 82540EM, Velocidad informada: 0 Mbps, Prioridad de arranque: 0, Política Promisc: denegar, Ancho de banda grupo: ninguno NIC 2: MAC: 080027D992F0, Archivo adjunto: Interfaz de solo host 'vboxnet0', Cable conectado: activado, Seguimiento: desactivado (archivo: ninguno), Tipo: 82540EM, Velocidad informada: 0 Mbps, Prioridad de arranque: 0, Política Promisc: denegar , Grupo de ancho de banda: ninguno
08002783E8BB para el primer adaptador en 'NatNetwork'red
080027D992F0 para el segundo adaptador para 'vboxnet0'interfaz
ahora podemos obtener IP de la tabla DHCP para el primer adaptador
% vboxmanage dhcpserver findlease --network NatNetwork --mac-address=08002783E8BB Dirección IP: 10.10.12.4 Dirección MAC: 08:00:27:83:e8:bb Estado: acked Emitido: 2020-07-13T13:31:20Z (1594647080) Caducar: 2020-07-13T13:41:20Z (1594647680) TTL: 600 segundos, actualmente quedan 586 segundos
y por segundo
% vboxmanage dhcpserver findlease --interface vboxnet0 --mac-address=080027D992F0 Dirección IP: 192.168.6.3 Dirección MAC: 08:00:27:d9:92:f0 Estado: acked Emitido: 2020-07-13T13:29:06Z (1594646946) Caducar: 2020-07-13T13:39:06Z (1594647546) TTL: 600 segundos, actualmente quedan 399 segundos
tenga en cuenta
que para la red nat usamos la opción --red
para el adaptador solo de host usamos la opción --interfaz
ahora nos conectamos a esta VM desde el host por ssh
%ssh[correo electrónico protegido] [correo electrónico protegido]contraseña de: Último inicio de sesión: lunes 13 de julio 09:05:33 2020 [raíz@nodo0 ~]#
Respuesta4
Así lo hago yo, tanto a mano como en ansible. "/Net/0/" es la primera interfaz de red, "/Net/1/" la segunda, etc. "/V4/" es para IPv4 y "/V6/" es IPv6.
versión IPv4
VBoxManage guestproperty get <uuid|vmname> "/VirtualBox/GuestInfo/Net/0/V4/IP" | sed -e 's/Value: //g'
Versión IPV6
VBoxManage guestproperty get <uuid|vmname> "/VirtualBox/GuestInfo/Net/0/V6/IP" | sed -e 's/Value: //g'
Ponlo en un script simple:
#!/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
Lo que proporciona un resultado similar a este de todas las máquinas virtuales en ejecución:
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: Requiere la instalación de Guest Additions.