首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何使用QEMU实现从主机到客户的SSH?

如何使用QEMU实现从主机到客户的SSH?
EN

Unix & Linux用户
提问于 2014-04-14 11:57:22
回答 5查看 169.9K关注 0票数 60

如何使用qemu设置从主机到客户的ssh?我能够在没有任何特殊参数的情况下引导VM时使用端口重定向,如下所示:

代码语言:javascript
运行
复制
/usr/bin/qemu-system-x86_64 -hda ubuntu1204 -m 512 -redir tcp:7777::8001

但是,当我尝试使用以下方法引导时:

代码语言:javascript
运行
复制
/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没有启动:

代码语言:javascript
运行
复制
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工作正常。

编辑

我试过用

代码语言:javascript
运行
复制
-net user,hostfwd=tcp::7777-:8001

以及

代码语言:javascript
运行
复制
-net user,hostfwd=tcp::7777:8001

但是,错误仍然存在,VM没有启动。

EN

回答 5

Unix & Linux用户

回答已采纳

发布于 2014-04-14 20:23:54

我认为错误不是来自-net语句,而是来自:

代码语言:javascript
运行
复制
-chardev socket,host=localhost,port=7777,server,nowait,id=port1-char

该语句已经使用了端口7777。用于港口转发,与

代码语言:javascript
运行
复制
-net user,hostfwd=tcp::7777-:8001

当不设置virtio串行通道时,它工作得很好。

如果我理解得对,您想要设置virtio串行通道,使用Unix域套接字从主机到VM进行通信?

在这种情况下,下列人员可以完成这项工作:

代码语言:javascript
运行
复制
/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的示例:

代码语言:javascript
运行
复制
-net user,hostfwd=tcp::10022-:22
-net nic

此主机转发将本地主机(主机)端口10022映射到VM上的端口22。一旦VM像这样启动,您就可以从本地主机访问它,如下所示:

代码语言:javascript
运行
复制
ssh vmuser@localhost -p10022

-net nic命令初始化一个非常基本的虚拟网络接口卡。

票数 63
EN

Unix & Linux用户

发布于 2015-04-14 05:09:33

将其添加到qemu网络配置中:

代码语言:javascript
运行
复制
,hostfwd=tcp::2222-:22

例如:

代码语言:javascript
运行
复制
qemu -net nic -net user,hostfwd=tcp::2222-:22

tcp:2222-::22标志将主机的端口2222映射到虚拟机上的端口22 (默认SSH端口)。

然后,只需将SSHing重定向到本地主机(主机)上的端口2222,就可以将任何通信量重定向到虚拟机中的SSH端口,这将允许您像通常的任何其他机器一样进行ssh:

代码语言:javascript
运行
复制
$ ssh -p 2222 localhost
票数 34
EN

Unix & Linux用户

发布于 2016-09-02 22:46:37

OpenSSH配置在Buildroot 2016.05、QEMU2.5.0、Ubuntu16.04主机

上测试

除了QEMU网络转发,您还需要正确地设置SSH,我将在这里介绍。

qemu_x86_64_defconfig开始并启用openssh包:

代码语言:javascript
运行
复制
make qemu_x86_64_defconfig
echo 'BR2_PACKAGE_OPENSSH=y' >> .config
make BR2_JLEVEL=$(nproc)

然后用以下内容启动QEMU:

代码语言:javascript
运行
复制
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

然后对客人说:

代码语言:javascript
运行
复制
vi /etc/ssh/sshd_config

修改下列设置:

代码语言:javascript
运行
复制
PermitRootLogin yes
PermitEmptyPasswords yes

并重新启动服务器:

代码语言:javascript
运行
复制
/etc/init.d/S50sshd restart

正是因为该文件存在,sshd默认启动,下面是源代码:https://github.com/buildroot/buildroot/blob/2018.02/package/openssh/S50sshd和关键启动操作如下:

代码语言:javascript
运行
复制
/usr/bin/ssh-keygen -A
/usr/sbin/sshd
touch /var/lock/sshd

然后从主人那里:

代码语言:javascript
运行
复制
ssh root@localhost -p 2222

如果失败,首先测试网络转发是否使用比sshd更低的工具:例如nc -l 如前所述

还请检查来宾上的服务器日志:

代码语言:javascript
运行
复制
less /var/log/messages

然后,在最终的系统中,您应该使用BR2_ROOTFS_OVERLAYBR2_ROOTFS_POST_BUILD_SCRIPTbuildroot.org \自定义生成的目标文件系统自动创建日志文件。

相关:https://stackoverflow.com/questions/23106012/how-to-access-raspberry-pi-qemu-vm-via-network

票数 10
EN
页面原文内容由Unix & Linux提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://unix.stackexchange.com/questions/124681

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档