如何使用qemu设置从主机到客户的ssh?我能够在没有任何特殊参数的情况下引导VM时使用端口重定向,如下所示:
/usr/bin/qemu-system-x86_64 -hda ubuntu1204 -m 512 -redir tcp:7777::8001
但是,当我尝试使用以下方法引导时:
/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
我得到以下错误,VM没有启动:
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
请注意,我可以在不使用-net
参数的情况下引导VM,而不会出现任何问题,但是,我希望将ssh从主机安装到来宾。从客人到主机的ssh工作正常。
我试过用
-net user,hostfwd=tcp::7777-:8001
以及
-net user,hostfwd=tcp::7777:8001
但是,错误仍然存在,VM没有启动。
发布于 2014-04-14 20:23:54
我认为错误不是来自-net
语句,而是来自:
-chardev socket,host=localhost,port=7777,server,nowait,id=port1-char
该语句已经使用了端口7777
。用于港口转发,与
-net user,hostfwd=tcp::7777-:8001
当不设置virtio串行通道时,它工作得很好。
如果我理解得对,您想要设置virtio串行通道,使用Unix域套接字从主机到VM进行通信?
在这种情况下,下列人员可以完成这项工作:
/usr/bin/qemu-system-x86_64 \
-m 1024 \
-name vserialtest \
-hda ubuntu1204 \
-chardev socket,path=/tmp/port1,server=on,wait=off,id=port1-char \
-device virtio-serial \
-device virtserialport,id=port1,chardev=port1-char,name=org.fedoraproject.port.0 \
-net user,hostfwd=tcp::7777-:8001
如何使用ssh连接到VM的示例:
-net user,hostfwd=tcp::10022-:22
-net nic
此主机转发将本地主机(主机)端口10022映射到VM上的端口22。一旦VM像这样启动,您就可以从本地主机访问它,如下所示:
ssh vmuser@localhost -p10022
-net nic命令初始化一个非常基本的虚拟网络接口卡。
发布于 2015-04-14 05:09:33
将其添加到qemu网络配置中:
,hostfwd=tcp::2222-:22
例如:
qemu -net nic -net user,hostfwd=tcp::2222-:22
tcp:2222-::22
标志将主机的端口2222映射到虚拟机上的端口22 (默认SSH端口)。
然后,只需将SSHing重定向到本地主机(主机)上的端口2222,就可以将任何通信量重定向到虚拟机中的SSH端口,这将允许您像通常的任何其他机器一样进行ssh:
$ ssh -p 2222 localhost
发布于 2016-09-02 22:46:37
上测试
除了QEMU网络转发,您还需要正确地设置SSH,我将在这里介绍。
从qemu_x86_64_defconfig
开始并启用openssh包:
make qemu_x86_64_defconfig
echo 'BR2_PACKAGE_OPENSSH=y' >> .config
make BR2_JLEVEL=$(nproc)
然后用以下内容启动QEMU:
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
然后对客人说:
vi /etc/ssh/sshd_config
修改下列设置:
PermitRootLogin yes
PermitEmptyPasswords yes
并重新启动服务器:
/etc/init.d/S50sshd restart
正是因为该文件存在,sshd默认启动,下面是源代码:https://github.com/buildroot/buildroot/blob/2018.02/package/openssh/S50sshd和关键启动操作如下:
/usr/bin/ssh-keygen -A
/usr/sbin/sshd
touch /var/lock/sshd
然后从主人那里:
ssh root@localhost -p 2222
如果失败,首先测试网络转发是否使用比sshd更低的工具:例如nc -l
如前所述。
还请检查来宾上的服务器日志:
less /var/log/messages
然后,在最终的系统中,您应该使用BR2_ROOTFS_OVERLAY
或BR2_ROOTFS_POST_BUILD_SCRIPT
:buildroot.org \自定义生成的目标文件系统自动创建日志文件。
相关:https://stackoverflow.com/questions/23106012/how-to-access-raspberry-pi-qemu-vm-via-network
https://unix.stackexchange.com/questions/124681
复制相似问题