web-dev-qa-db-fra.com

Comment SSH de l'hôte à l'invité en utilisant QEMU?

Comment configurer ssh de l'hôte à l'invité à l'aide de qemu? Je peux utiliser la redirection de port lorsque je démarre le VM sans aucun paramètre spécial, 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 le VM 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

Veuillez noter que je peux démarrer le VM sans le -net paramètre sans aucun problème, cependant, je veux configurer ssh de l'hôte à l'invité. ssh de l'invité à l'hôte fonctionne correctement comme prévu.

Éditer

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 le VM ne démarre pas.

31
jobin

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 la redirection de port, avec

-Net User,hostfwd=tcp::7777-:8001

cela fonctionne bien lorsque vous ne configurez pas le canal série virtio.

Si je comprends bien, vous souhaitez 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, les éléments suivants pourraient 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

ÉDITER:

Un exemple de la façon de se connecter de l'hôte à l'aide de ssh à la machine virtuelle:

-Net User,hostfwd=tcp::10022-:22
-net nic

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

ssh vmuser@localhost -p10022

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

39
mas_kur1

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

$ ssh -p 2222 localhost

L'indicateur tcp: 2222 :: 22 dans la commande de lancement qemu mappe le port 2222 de la machine hôte au port 22 (le port ssh par défaut) sur la machine virtuelle.

Ensuite, le simple fait de glisser vers le port 2222 de votre hôte local (la machine hôte) redirigera tout le trafic vers le port ssh 22 de la machine virtuelle, ce qui devrait vous permettre de faire du ssh comme vous le feriez normalement avec n'importe quelle autre machine.

21
mikeschuld

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

Outre la redirection de réseau QEMU, vous devez également configurer correctement SSH, que je couvrirai ici.

Commencer avec qemu_x86_64_defconfig et activez le paquet openssh:

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

Ensuite, 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 paramètres suivants:

PermitRootLogin yes
PermitEmptyPasswords yes

Et redémarrez le serveur:

/etc/init.d/S50sshd restart

C'est parce que ce fichier existe que sshd démarre par défaut, voici la source: https://github.com/buildroot/buildroot/blob/2018.02/package/openssh/S50sshd et les opérations de démarrage clés sont:

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

Puis de l'hôte:

ssh root@localhost -p 2222

En cas d'échec, testez d'abord que le transfert de réseau fonctionne avec un outil de niveau inférieur à sshd: par ex. nc -lcomme décrit ici .

vérifiez également les journaux du serveur sur l'invité:

less /var/log/messages

Ensuite, sur le système final, vous devez automatiser la création de ce fichier journal avec BR2_ROOTFS_OVERLAY ou BR2_ROOTFS_POST_BUILD_SCRIPT: Personnalisation du système de fichiers cible généré | buildroot.org