Máquina virtual amigável da linha de comandos

4

Eu tenho usado o Virtualbox por um tempo agora, mas a única maneira que eu aprendi a interagir com ele é através da interface gráfica.

Existe uma maneira de eu enviar comandos bash para a vm através da linha de comando para que eu possa escrever scripts do host que interajam com o convidado?

por exemplo,

$ sendMessage vmName "echo hello"

Estou disposto a experimentar novos softwares de virtualização.

Atualmente, estou em um Mac e gostaria de executar um convidado do Linux dessa maneira.

Editar:

Eu quero executar um código possivelmente malicioso para ver seu comportamento. Idealmente, quero desabilitar a rede no convidado para ter certeza de que o convidado está completamente isolado.

Eu estava esperando que o convidado e o anfitrião pudessem se comunicar puramente através de stdin / stdout.

    
por math4tots 15.02.2012 / 01:54

3 respostas

4

Usando sistemas de arquivos compartilhados

Você pode usar o suporte do VirtualBox para expostar um diretório de host dentro do convidado. Coloque o código que deseja testar dentro do seu compartilhamento diretamente, inicialize a VM e use o console para navegar até o diretório compartilhado e executar o código. Você não precisa de nenhuma rede, a exposição ao seu host é apenas nesse diretório compartilhado e você pode usar snapshots para reverter quaisquer alterações no sistema de arquivos guest.

Usando uma porta serial virtual

Você pode configurar uma porta serial de convidado para que possa interagir com o convidado do host sem qualquer rede configurada.

No VirtualBox, vá para Configurações - > Portas, ative a primeira porta serial e defina o modo de porta como "Host Pipe" (e certifique-se de que "Create Pipe" esteja selecionado). Digite um caminho no campo apropriado (por exemplo, /tmp/hostserial ). Esse caminho é o soquete do Unix que será exposto no seu host.

Inicialize seu convidado. Agora seu trabalho é conseguir algo dentro do convidado falando com o porto seiral. Tente isto:

agetty -l /bin/bash -n ttyS0 115200 vt100

Isso iniciará um shell bash em ttyS0 , a primeira porta serial. No seu host do OS X, verifique se você tem netcat instalado e tente isto:

nc -U /tmp/hostserial

Você se encontrará falando com bash no seu convidado. Isso não é exatamente o que você quer, mas talvez seja útil mesmo assim.

Eu iria com a primeira opção usando um diretório compartilhado, eu mesmo.

    
por 15.02.2012 / 02:43
3

Você não precisa de nenhuma ferramenta especial ou de um sistema de VM diferente para fazer isso. ssh já faz o que você quer:

$ ssh vmName "echo hello"

Substitua o nome do host da VM ou IP por vmName .

Se você usar um nome de host, ele deverá ser resolvido de alguma forma. Se o convidado tiver um IP estático, é mais fácil adicionar uma entrada para ele em /etc/hosts . Se o seu convidado usar DHCP, recomendo mudar para o dnsmasq para o servidor DHCP, se você já não estiver executando, porque também atua como um servidor DNS e cria automaticamente entradas DNS para cada concessão de DHCP.

Você também vai querer configurar a autenticação SSH baseada em chave para não precisar digitar a senha a cada tempo.

Agora, esse comando em particular não fará muita coisa útil. Você verá apenas hello ecoado no terminal do host, como se você tivesse digitado echo hello localmente. Para ver o que está acontecendo, diga algo assim:

$ ssh vmName 'echo $HOSTNAME'

(Observe o uso de aspas simples para impedir que o shell local interpole HOSTNAME antes de executar o comando.)

ssh é muito poderoso. Você pode fazer todos os tipos de truques dessa maneira, como enviar dados de um processo local para a máquina remota através do túnel SSH e redirecionar a saída do programa remoto para a máquina local.

    
por 15.02.2012 / 05:34
0

Eu tenho um servidor de caixa virtual do Arch Linux em execução no meu servidor principal em casa. Eu começo sem cabeça (sem cabeça gráfica) e depois ssh na caixa do meu laptop ou o servidor principal.

nohup vboxheadless --startvm ArchLinux >/tmp/ArchLinux.headless.out 2>&1 &

Configurei a VM para inicializar e configurar automaticamente a rede. Você também pode configurar um ouvinte VNC para se conectar usando isso. Mas eu acho ssh mais conveniente para enviar comandos para a VM.

    
por 15.02.2012 / 02:04