qemu启动vm后,如何从host ssh连接vm?

qemu启动参数

启动命令:

   ${cmd_qemu_system} --enable-kvm \
-machine type=q35,accel=kvm,kernel-irqchip=on -cpu host -smp 4 -m 16384 \
-serial mon:stdio -nographic -s \
-kernel $bzImage_name \
-device virtio-net-pci,netdev=unet,mac=52:54:00:f1:26:a6 \
-netdev user,id=unet,hostfwd=tcp::50959-:22 \
-initrd $rootfs_cpio_path \
-append "earlyprintk=ttyS0 console=ttyS0 debug" \
-hda $DISK_NAME

kenrel

linux 的.config 需要支持CONFIG_VIRTIO_NET=y:

[root@xxx /data/sandbox/open_linux/linux]
#cat .config | grep CONFIG_VIRTIO_NET=y
CONFIG_VIRTIO_NET=y

buildroot

实际上,我们知道,buildroot的目的就是要生成一个:rootfs.cpio.xz,然后,通过qemu命令启动一个vm的时候,执行参数-initrd 指定rootfs.cpio.xz 路径,就可以启动一个vm;

ssh:

我们需要预先在 buildroot 下载好 sshd, 这里,你会执行 make menuconfig 来给这个buildroot 指定sshd包要下载,之后,就会生成一个最新的.config文件,这个.config文件,应该包含:

[root@xxx /data/sandbox/open_linux/buildroot]
#cat .config |grep BR2_PACKAGE_OPENSSH
BR2_PACKAGE_OPENSSH=y

在buildroot中 将sshd配置文件修改正确,然后重新编译buildroot生成最新的:rootfs.cpio.xz

#vi ./output/target/etc/ssh/sshd_config
PermitRootLogin yes
PermitEmptyPasswords yes #这是是允许登录为空密码

通过这个rootfs.cpio.xz, 启动的vm 的sshd 配置:

# vi /etc/ssh/sshd_config
PermitRootLogin yes
PermitEmptyPasswords yes #这是是允许登录为空密码

network:

需要,现在buildroot中,增加配置eth0 :

#cd buildroot/
#vim output/target/etc/network/interfaces
auto eth0
iface eth0 inet static
address 10.0.2.15
netmask 255.0.0.0

或者,进入vm后:

ifconfig eth0 10.0.2.15
ifconfig eth0 up

如何使用虚拟bios?

git clone https://github.com/coreboot/seabios seabios
make menuconfig
make clean && make -j 8

在qemu启动中,增加bios:

In the command to start guest, you can specify the BIOS:

-bios seabios/out/bios.bin
start_vm(){
DISK_NAME="${muahao_tools_dir}/vm/disk02.raw"
if [[ ! -e $DISK_NAME ]];then
creat_image_01 "$DISK_NAME"
fi ${cmd_qemu_system} --enable-kvm \
-machine type=q35,accel=kvm,kernel-irqchip=on -cpu host -smp 4 -m 16384 \
-serial mon:stdio -nographic -s \
-kernel $bzImage_name \
-device virtio-net-pci,netdev=unet,mac=52:54:00:f1:26:a6 \
-netdev user,id=unet,hostfwd=tcp::2222-:22 \
-initrd $rootfs_cpio_path \
-append "earlyprintk=ttyS0 console=ttyS0 debug" \
-hda $DISK_NAME\
-bios ./open_linux/seabios/out/bios.bin
}

A debug test:

#vim src/boot.c
static void
boot_rom(u32 vector)
{
printf("Booting from ROM...\n");
struct segoff_s so;
so.segoff = vector;
call_boot_entry(so, 0);
}

如何给vm增加虚拟盘?

首先,你需要在host上创建一个image,然后,在使用qemu启动vm的时候,给qemu一个参数,挂载上这个image,启动guest后,可以在guest上 使用这个虚拟的硬盘;

首先,在host上创建一个image:

#qemu-img create -f raw /data/sandbox/images/vm_guest.img 5G

qemu启动参数:

   ${cmd_qemu_system} --enable-kvm \
-machine type=q35,accel=kvm,kernel-irqchip=on -cpu host -smp 2 -m 4096 \
-serial mon:stdio -nographic -s \
-kernel $bzImage_name \
-device virtio-net-pci,netdev=unet,mac=52:54:00:f1:26:a6 \
-netdev user,id=unet,hostfwd=tcp::2222-:22 \
-initrd $rootfs_cpio_path \
-append "earlyprintk=ttyS0 console=ttyS0 debug" \
-drive file=/data/sandbox/images/vm_guest.img,if=none,format=raw,id=nvme0 \ //<<<<<===增加
-device nvme,drive=nvme0,serial=foo \ //<<<<<===增加
-hda $DISK_NAME \
-bios /data/sandbox/open_linux/seabios/out/bios.bin

注意: 在linux中.config 一定要配置了nvme的支持

#cat .config | grep NVME

qemu启动vm后,如何host上使用ssh连接?的更多相关文章

  1. Mac上使用ssh连接服务器title显示服务器的ip

    Mac上使用ssh连接服务器title显示服务器的ip 使用Mac开发时,管理的服务器过多时,会搞混乱.可能有时啪啪啪一顿操作,最后发现操作错了机器. 解决方案 在远程服务器上,编辑vim /etc/ ...

  2. 批处理启动vm虚拟机服务 vm12启动无界面启动vm虚拟机系统 windows上如何操作服务 sc net启动关闭服务

    windows(win10)批处理脚本 打开vm虚拟机的服务,并且开启无界面虚拟机 @echo off net start "vds" net start "VMAuth ...

  3. github上创建ssh连接多个账户

    简单的说用两对ssh密钥来连接多个github账户,有的同学问:用一对连接多个账户行吗?答案是不行,因为密钥和你的账户邮箱关联了. 1.生成密钥. sshkey -t rsa -b 4096 -C & ...

  4. 在阿里云服务器上安装完成并启动Tomcat后,通过http不能访问--解决办法

    在阿里云服务器上安装完成并启动Tomcat后,通过http不能访问的原因是阿里云平台为了安全设置了安全组策略,必须我们授权的端口,其他计算机才能通过http访问 解决办法:(这里以阿里轻量应用服务器为 ...

  5. 解决:阿里云ECS上启动tomcat后,第一次访问时间特别长

    Re在ECS上启动tomcat后,第一次访问时间特别长      2017-04-25 10:16:04 INFO com.world.socket.ServerSocketListener  25- ...

  6. JavaWeb问题记录——在Windows上启动Tomcat后命令行窗口乱码

    JavaWeb问题记录——在Windows上启动Tomcat后命令行窗口乱码 摘要:本文主要记录了在Windows上启动Tomcat后,命令行窗口出现乱码的问题及解决办法. 问题重现 在Windows ...

  7. sshd 启动后 出现:Could not load host key: /etc/ssh/ssh_host_rsa_key

    今天在启动sshd时,出现了如下问题,导致客户端不能成功连接服务端,不能建立ssh连接: 有两个提示 Could not load host key: /etc/ssh/ssh_host_rsa_ke ...

  8. [原] KVM 虚拟化原理探究(2)— QEMU启动过程

    KVM 虚拟化原理探究- QEMU启动过程 标签(空格分隔): KVM [TOC] 虚拟机启动过程 第一步,获取到kvm句柄 kvmfd = open("/dev/kvm", O_ ...

  9. CloudStack系统虚拟机启动但不在Host表中

    有网友问到这个问题,CloudStack中,系统虚拟机正常启动,Running状态. 可是在host表中没有对应项,上传下载模板等功能也不正常. 原因:系统虚拟机启动之后,会通过管理网段主动连接man ...

随机推荐

  1. AutoIT: 如何从excel中取值并判断条件?

    #include <Excel.au3> $excel = _ExcelBookAttach("Book1.xlsx" ,"FileName") ; ...

  2. 1.Ext.onReady详解

    转自:https://blog.csdn.net/xufang461010923/article/details/37660139 我们知道,只有在Ext框架全部加载完后才能在客户端的代码中使用Ext ...

  3. asp.net Identity2 角色(Role)的使用(一)初始配置

    asp.net Identity自带有角色功能,但默认的模板并没有启用.启用Role的步骤如下:定义role模型--配置角色管理器---配置初始化器---修改数据库上下对象---在应用程序启动文件中配 ...

  4. 关于使用jxl去读写Excel文件

    1.引入maven依赖 <dependency> <groupId>net.sourceforge.jexcelapi</groupId> <artifact ...

  5. P4475 巧克力王国(KDTree)

    传送门 首先可以把约束条件看成一条直线,然后每个巧克力看成一个点,求给定区域内的点权和 用KDTree,每次判断一下当前矩形是否整个都在里面或都在外面,是的话直接返回,否则的话递归 注意,必须该矩形四 ...

  6. Unix\Linux | 总结笔记 | vi编辑器

    0 目录   新建文件夹   常用的命令    三种模式及切换    vi编辑器的启动选项及后续相关操作  其他--替换文本  其他--写入另一个文件     1  新建文件夹  vi [目录名/文件 ...

  7. for循环的阶乘

    方法一: long sum=0; long num=1; for (long i = 1; i <=20; i++) { for(long j=i;j>0;j--){ num=num*j; ...

  8. Java几种常见的排序方法

    日常操作中常见的排序方法有:冒泡排序.快速排序.选择排序.插入排序.希尔排序,甚至还有基数排序.鸡尾酒排序.桶排序.鸽巢排序.归并排序等. 冒泡排序是一种简单的排序算法.它重复地走访过要排序的数列,一 ...

  9. vijos P1412多人背包 DP的前k优解

    https://vijos.org/p/1412 把dp设成,dp[i][v][k]表示在前i项中,拥有v这个背包,的第k大解是什么. 那么dp[i][v][1...k]就是在dp[i - 1][v] ...

  10. hihocoder 神奇字符串

    思路: 暴力,模拟. 实现: #include <iostream> #include <algorithm> #include <cstdio> #include ...