저는 한동안 Virtualbox를 사용해 왔지만, Virtualbox와 상호 작용하는 방법을 배운 유일한 방법은 그래픽 인터페이스를 통해서였습니다.
게스트와 상호 작용하기 위해 호스트 시스템에서 스크립트를 작성할 수 있도록 명령줄을 통해 가상 시스템에 bash 명령을 보내는 방법이 있습니까?
예를 들어
$ sendMessage vmName "echo hello"
새로운 가상화 소프트웨어를 사용해 볼 의향이 있습니다.
저는 현재 Mac을 사용하고 있으며 이런 방식으로 Linux 클라이언트를 실행하고 싶습니다.
편집하다:
잠재적인 악성 코드를 실행하여 동작을 확인하고 싶습니다. 이상적으로는 게스트가 완전히 격리되도록 게스트의 네트워킹을 비활성화하고 싶습니다.
나는 게스트와 호스트가 순수하게 stdin/stdout을 통해 통신하기를 원합니다.
답변1
공유 파일 시스템 사용
VirtualBox 지원을 사용하여 게스트의 호스트 디렉터리를 노출할 수 있습니다. 테스트하려는 코드를 공유 디렉터리에 직접 배치하고 가상 머신을 시작한 다음 콘솔을 사용하여 공유 디렉터리로 이동하고 코드를 실행하세요. 네트워크가 필요하지 않으며 호스트에 대한 노출은 공유 디렉터리에만 있으며 스냅샷을 사용하여 게스트 파일 시스템에 대한 변경 사항을 되돌릴 수 있습니다.
가상 직렬 포트 사용
네트워크를 구성하지 않고도 호스트 시스템에서 게스트와 상호 작용할 수 있도록 게스트 직렬 포트를 구성할 수 있습니다.
VirtualBox에서 설정 -> 포트로 이동하여 첫 번째 직렬 포트를 활성화하고 포트 모드를 "Host Pipe"로 설정합니다("Create Pipe"가 선택되어 있는지 확인). 해당 필드에 경로(예:)를 입력합니다 /tmp/hostserial
. 경로는 호스트에 노출될 Unix 소켓입니다.
손님을 활성화하십시오. 이제 당신의 임무는 게스트가 내부적으로 직렬 포트와 통신하도록 하는 것입니다. 이 시도:
agetty -l /bin/bash -n ttyS0 115200 vt100
ttyS0
그러면 첫 번째 직렬 포트에서 bash 쉘이 시작됩니다. OS X 호스트에 설치되어 있는지 확인 netcat
하고 다음을 시도해 보세요.
nc -U /tmp/hostserial
bash
손님들과 대화를 나누는 자신을 발견하게 될 것입니다. 이것은 정확히 당신이 원하는 것이 아니지만 어쨌든 도움이 될 수 있습니다.
나 자신은 공유 디렉터리를 사용하는 첫 번째 옵션을 선택하겠습니다.
답변2
이를 수행하기 위해 특별한 도구나 다른 가상 머신 시스템이 필요하지 않습니다. ssh
당신이 원하는 것을 이미 완료했습니다:
$ ssh vmName "echo hello"
VM의 호스트 이름 또는 IP를 vmName
.
호스트 이름을 사용하는 경우 어떻게든 확인할 수 있어야 합니다. 게스트가 고정 IP를 갖고 있는 경우 가장 쉬운 방법은 에서 이를 수행하는 것입니다 /etc/hosts
. 게스트가 DHCP를 사용하는 경우 DHCP로 전환하는 것이 좋습니다.DNSDHCP 서버의 경우(아직 실행하지 않은 경우) DNS 서버 역할도 하며 각 DHCP 임대에 대한 DNS 항목을 자동으로 구축하기 때문입니다.
당신도 원할 것입니다키 기반 SSH 인증 설정따라서 매번 비밀번호를 입력할 필요가 없습니다.
이제 이 특정 명령은 그다지 유용하지 않습니다. 마치 로컬에서 입력하는 hello
것처럼 호스트 터미널에서만 에코가 표시됩니다 echo hello
. 무슨 일이 일어나고 있는지 확인하려면 다음과 같이 말해보세요.
$ ssh vmName 'echo $HOSTNAME'
HOSTNAME
( 명령을 실행하기 전에 로컬 쉘이 보간되는 것을 방지하기 위해 작은따옴표를 사용하는 것에 유의하십시오 .)
ssh
예매우강한. 이런 방식으로 SSH 터널을 통해 로컬 프로세스에서 원격 컴퓨터로 데이터를 전송하고, 원격 프로그램의 출력을 로컬 컴퓨터로 리디렉션하는 등 다양한 트릭을 수행할 수 있습니다.
답변3
집에 있는 메인 서버에서 Arch Linux virtualbox 서버를 실행하고 있습니다. 헤드리스(그래픽 헤더 없음)로 시작한 다음 노트북이나 메인 서버에서 상자로 SSH를 통해 연결합니다.
nohup vboxheadless --startvm ArchLinux >/tmp/ArchLinux.headless.out 2>&1 &
네트워크를 자동으로 시작하고 설정하도록 가상 머신을 설정했습니다. VNC 수신기를 설정하여 이를 사용하여 연결할 수도 있습니다. 하지만 저는 ssh
가상 머신에 명령을 보내는 것이 더 편리하다고 생각합니다.