Como SSH do host para convidado usando o QEMU?

23

Como configuro o ssh do host para o convidado usando o qemu? Eu sou capaz de usar o redirecionamento de porta quando eu inicializo a VM sem nenhum parâmetro especial, como segue:

/usr/bin/qemu-system-x86_64 -hda ubuntu1204 -m 512 -redir tcp:7777::8001

Mas quando tento inicializar usando o seguinte:

/usr/bin/qemu-system-x86_64 \
-m 1024 \
-name vserialtest \
-hda ubuntu1204 \
-chardev socket,host=localhost,port=7777,server,nowait,id=port1-char \
-device virtio-serial \
-device virtserialport,id=port1,chardev=port1-char,name=org.fedoraproject.port.0 \
-net user,hostfwd=tcp:7777::8001

Eu recebo o seguinte erro e a VM não inicializa:

qemu-system-x86_64: -net user,hostfwd=tcp:7777::8001: invalid host
forwarding rule 'tcp:7777::8001'
qemu-system-x86_64: -net user,hostfwd=tcp:7777::8001: Device 'user'
could not be initialized

Por favor, note que eu posso inicializar a VM sem o parâmetro -net sem quaisquer problemas, no entanto, eu quero configurar o ssh do host para o convidado. O ssh do convidado para o host funciona bem como esperado.

Editar

Eu tentei usar

-net user,hostfwd=tcp::7777-:8001

bem como

-net user,hostfwd=tcp::7777:8001

mas ainda assim o erro persiste e a VM não inicializa.

    
por jobin 14.04.2014 / 13:57

4 respostas

26

Acho que o erro não vem da declaração -net, mas de:

-chardev socket,host=localhost,port=7777,server,nowait,id=port1-char

A instrução já usa a porta 7777. Para o encaminhamento de porta, com

-net user,hostfwd=tcp::7777-:8001

funciona bem quando não está configurando o canal serial virtio.

Se bem entendi, você deseja configurar um canal serial virtio para se comunicar do host para a VM usando um soquete de domínio Unix?

Neste caso, o seguinte poderia fazer o trabalho:

/usr/bin/qemu-system-x86_64 \
-m 1024 \
-name vserialtest \
-hda ubuntu1204 \
-chardev socket,path=/tmp/port1,server,nowait,id=port1-char \
-device virtio-serial \
-device virtserialport,id=port1,chardev=port1-char,name=org.fedoraproject.port.0 \
-net user,hostfwd=tcp::7777-:8001

EDITAR:

Um exemplo de como se conectar a partir do host usando ssh para a VM:

-net user,hostfwd=tcp::10022-:22
-net nic

Este hostforwarding mapeia a porta 10022 do host local (host) para a porta 22 na VM. Depois que a VM foi iniciada assim, você pode acessá-la a partir do host local da seguinte forma:

ssh vmuser@localhost -p10022

O comando -net nic inicializa uma placa de interface de rede virtual muito básica.

    
por 14.04.2014 / 22:23
19

Tente isso ao lançar qemu -redir tcp:2222::22

$ ssh -p 2222 localhost

A sinalização tcp: 2222 :: 22 no comando qemu launch mapeia a porta 2222 da máquina host para a porta 22 (a porta ssh padrão) na máquina virtual.

Em seguida, simplesmente conectando a porta 2222 no seu host local (a máquina host) redirecionará qualquer tráfego para a porta ssh 22 na máquina virtual, o que deve permitir que você faça o ssh como normalmente faria com qualquer outra máquina.

    
por 14.04.2015 / 07:09
4

Configuração OpenSSH testada no host Buildroot 2016.05, QEMU 2.5.0, Ubuntu 16.04

Além do encaminhamento de rede do QEMU, você também precisa configurar o SSH corretamente, o que abordarei aqui.

Comece com qemu_x86_64_defconfig e ative o pacote openssh:

make qemu_x86_64_defconfig
echo 'BR2_PACKAGE_OPENSSH=y' >> .config
make BR2_JLEVEL=$(nproc)

Em seguida, inicie o QEMU com:

qemu-system-x86_64 \
  -M pc \
  -append root=/dev/vda \
  -drive file=output/images/rootfs.ext2,if=virtio,format=raw \
  -enable-kvm \
  -kernel output/images/bzImage \
  -m 512 \
  -net nic,model=virtio \
  -net user,hostfwd=tcp::2222-:22

Em seguida, no convidado:

vi /etc/ssh/sshd_config

Modifique as seguintes configurações:

PermitRootLogin yes
PermitEmptyPasswords yes

E reinicie o servidor:

/etc/init.d/S50sshd restart

É porque existe este arquivo que o sshd é iniciado por padrão, aqui está a fonte: link e as principais operações de inicialização são:

/usr/bin/ssh-keygen -A
/usr/sbin/sshd
touch /var/lock/sshd

Então, do host:

ssh root@localhost -p 2222

Em caso de falha, primeiro teste que o encaminhamento de rede está funcionando com uma ferramenta de nível inferior ao sshd: por ex. nc -l conforme descrito aqui .

verifique também os registros do servidor no convidado:

less /var/log/messages

Em seguida, no sistema final, você deve automatizar a criação desse arquivo de log com BR2_ROOTFS_OVERLAY ou BR2_ROOTFS_POST_BUILD_SCRIPT : Personalizando o sistema de arquivos de destino gerado | buildroot.org

    
por 03.09.2016 / 00:46
-1

Acredito que você precisa usar hostfwd=tcp::7777-:8001 ou hostfwd=tcp::7777:8001

    
por 14.04.2014 / 14:12