
다음 명령을 사용하여 백그라운드에서 Virtual Box에서 Ubuntu 인스턴스를 실행합니다.
VBoxManage startvm ${VM_NAME} --type headless
GUI를 통해 실행하는 것과 주요 차이점은 GUI가 시작된 후 GUI에 있을 때 호스트의 터미널에서 IP 주소에 접속할 ifconfig
수 있도록 IP 주소가 무엇인지 확인할 수 있다는 것입니다. ssh
백그라운드에서는 그렇게 하지 마세요.
네트워크에서 IP 주소의 동적 할당을 가정할 때 SSH 목적으로 새로 생성된 인스턴스에 할당된 IP를 추출하는 방법이 있습니까? 아니면 IP를 모르고(예: 호스트의 백도어 포트를 통해) 인스턴스에 SSH를 통해 연결하는 방법이 있습니까? )?
답변1
다음과 같이 VBoxManage 명령을 사용하여 IP 주소를 추출할 수 있습니다.이 포럼 게시물virtualbox.org에서:
VBoxManage guestproperty enumerate <vmname>
그러나 아주 좋은 이유가 있지 않는 한 게스트 VM에 고정 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
게스트 추가를 설치하지 않고도 할 수 있습니다
하지만 네트워크를 알아야 합니다.
예를 들어 어댑터가 2개 있는 VM이 있습니다.
하나는 인터넷 통신용이고
두 번째는 호스트 전용 통신용입니다.
명령으로 네트워크를 볼 수 있습니다VBox관리 목록
NAT 네트워크:
% VBoxManage 목록 natnets 네트워크 이름: 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
여기
VM을 실행하는 주요 부분이 나와 있습니다.
vms를 실행 중인 % vboxmanage 목록 "centos7 node0 IP 테스트" {46ec9075-f49b-4d16-9867-d56710b6a3da}
VM uuid가 필요합니다.
46ec9075-f49b-4d16-9867-d56710b6a3da입니다.
이제 MAC 주소를 가져올 수 있습니다
% vboxmanage showvminfo --details 46ec9075-f49b-4d16-9867-d56710b6a3da | fgrep 맥 NIC 1: MAC: 08002783E8BB, 첨부 파일: NAT 네트워크 'NatNetwork', 연결된 케이블: 켜짐, 추적: 꺼짐(파일: 없음), 유형: 82540EM, 보고된 속도: 0Mbps, 부팅 우선 순위: 0, Promisc 정책: 거부, 대역폭 그룹: 없음 NIC 2: MAC: 080027D992F0, 첨부 파일: 호스트 전용 인터페이스 'vboxnet0', 연결된 케이블: 켜짐, 추적: 꺼짐(파일: 없음), 유형: 82540EM, 보고된 속도: 0Mbps, 부팅 우선 순위: 0, Promisc 정책: 거부 , 대역폭 그룹: 없음
'NatNetwork'의 첫 번째 어댑터에 대한 08002783E8BB회로망
'vboxnet0'에 대한 두 번째 어댑터의 경우 080027D992F0상호 작용
이제 첫 번째 어댑터에 대해 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 네트워크의 경우 호스트 전용 어댑터에 --net 옵션을 사용합니다. 우리
는 --interface 옵션을 사용합니다.
이제 SSH를 통해 호스트에서 이 VM에 연결합니다.
% SSH[이메일 보호됨] [이메일 보호됨]님의 비밀번호: 마지막 로그인: 2020년 7월 13일 월요일 09:05:33 [루트@노드0 ~]#
답변4
이것이 내가 손으로나 앤서블을 사용하여 수행하는 방법입니다. "/Net/0/"은 첫 번째 네트워크 인터페이스이고, "/Net/1/"은 두 번째입니다. "/V4/"는 IPv4용이고 "/V6/"는 IPv6입니다.
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과 유사한 출력을 제공합니다.
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
참고: 게스트 추가를 설치해야 합니다.