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.
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.
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.
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.
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 -l
comme 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