ssh de l'hôte à l'invité utilisant qemu

Comment configurer ssh de l'hôte à l'invité en utilisant qemu? Je suis capable d'utiliser la redirection de port lorsque je démarre la machine virtuelle sans parameters spéciaux, comme suit:

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

Mais quand j'essaie de démarrer en utilisant ce qui suit:

 /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 

J'obtiens l'erreur suivante et la machine virtuelle ne démarre pas:

 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 

S'il vous plaît noter que je suis capable de démarrer la machine virtuelle sans le paramètre -net sans aucun problème, cependant, je veux configurer ssh de l'hôte à l'invité. ssh from guest to host fonctionne comme prévu.

modifier

J'ai essayé d'utiliser

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

aussi bien que

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

mais l'erreur persiste et la machine virtuelle ne démarre pas.

Je pense que l'erreur ne vient pas de l'instruction -net, mais de:

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

L'instruction utilise déjà le port 7777. Pour le transfert de port, avec

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

cela fonctionne correctement quand vous ne configurez pas le canal série virtio.

Si je comprends bien, vous voulez configurer un canal série virtio pour communiquer de l'hôte à la machine virtuelle à l'aide d'un socket de domaine Unix?

Dans ce cas, ce qui suit pourrait faire le travail:

 /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 

MODIFIER:

Un exemple de comment se connecter à partir de l'hôte en utilisant ssh à la VM:

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

Cette hostforwarding mappe le port d'hôte local (hôte) 10022 vers le port 22 sur la machine virtuelle. Une fois que la machine virtuelle a été démarrée comme ceci, vous pouvez y accéder à partir de l'hôte local comme suit:

 ssh vmuser@localhost -p10022 

La command -net nic initialise une carte d'interface réseau virtuelle très basique.

Essayez ceci lors du lancement de qemu -redir tcp:2222::22

 $ ssh -p 2222 localhost 

Le drapeau tcp: 2222 :: 22 de la command de lancement qemu mappe le port 2222 de la machine hôte sur le port 22 (port ssh par défaut) de la machine virtuelle.

Ensuite, sshing vers le port 2222 de votre hôte local redirecta tout le trafic vers le port ssh 22 de la machine virtuelle, ce qui devrait vous permettre de ssh comme vous le feriez normalement pour toute autre machine.

Configuration SSH testée sur Buildroot 2016.05, QEMU 2.5.0, Ubuntu 16.04

Outre le transfert de réseau QEMU, vous devez également configurer correctement SSH, que je vais couvrir ici.

Commencez par qemu_x86_64_defconfig et activez le package openssh.

Vérifiez d'abord que le transfert réseau fonctionne avec un outil de niveau inférieur à sshd, par exemple nc -l (doit être activé sur package/busybox/default.config ).

Puis démarrez QEMU avec:

 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 

Puis sur invité:

 vi /etc/ssh/sshd_config 

Modifiez les parameters suivants:

 PermitRootLogin yes PermitEmptyPassword yes 

Et redémarrez le server:

 /etc/init.d/50sshd restart 

C'est parce que ce file existe que sshd démarre par défaut.

Puis de l'hôte:

 ssh root@localhost -p 2222 

En cas d'échec, vérifiez également le server se connecte sur invité:

 less /var/log/messages 

Ensuite, sur le système final, vous devez automatiser la création de ce file journal avec BR2_ROOTFS_OVERLAY ou BR2_ROOTFS_POST_BUILD_SCRIPT : https://buildroot.org/downloads/manual/manual.html#rootfs-custom

Je crois que vous devez utiliser hostfwd=tcp::7777-:8001 ou hostfwd=tcp::7777:8001