通过KVM上传文件到Linux系统,通过QEMU-GuestAgent实现从外部注入写文件到KVM虚拟机内部...

2a90bbcbe76a2eff521eb72ba68b9c23.png

本文将以宿主上直接写文件到VM内部为例讲解为何要注入以及如何实现

tag: qemu-ga, qemu guest agent, kvm, guest-file-write, inject

小慢哥的原创文章,欢迎转载

目录

▪ 为什么要“注入”到VM内部

▪ 如何实现“注入”

▪ Step1. 为VM配置channel

▪ Step2. 部署qemu-ga

▪ Step3. 注入操作说明

▪ Step4. Base64计算

▪ Step5. 开始注入

▪ 附1. qemu-ga支持的所有指令

▪ 附2. 配置多个channel

▪ 参考文档

为什么要“注入”到VM内部

原因很简单:在VM外部无法实现,只能进入到VM内来实现

KVM不像Docker(container)只是对进程进行cgroup隔离,KVM是全封闭的环境。

对于基于KVM的虚拟机来说,通常存在如下需求:

▷ 在线修改密码

▷ 在线增加公钥

▷ 在线采集性能(如cpu使用率、负载、内存使用量等性能指标)

▷ 其他各种在线功能

上述这些场景的共性:仅在VM外部是无法实现的。因此就有了多种解决方案,但无论哪种解决方案都要同时满足以下2点才能实现:

▷ 通道:在VM内部与外部(宿主)之间打开一个通道,可以进行数据交互

▷ agent:在VM内部种下一个agent,用于接收外部的指令并反馈结果

在VM内部种下agent的做法可以形象地称之为"inject 注入"

如何实现“注入”

第一步,打开通道

有2类方法:

▷ 走网络:会复杂一些,需要提前预插入一张管理网卡,或者利用已有网卡+特殊的路由来确保数据能走出去,这带来了较为复杂的网络拓扑

▷ 走设备:简单很多,只需在VM内部和宿主之间建立一个设备通道即可。比如为KVM虚拟机增加一个字符设备,并在宿主上映射为一个socket文件。字符设备与socket之间形成了一个channel,通过该channel就可以进行内外数据互通

“走网络”不是本文想要介绍的,接下来所有内容均为“走设备”

第二步,启动agent

在虚拟机里启动一个agent,实时读取字符设备,实现与宿主的数据交互。

在channel中发送与接收什么样的数据,是可以自己定义的,也可以使用KVM官方实现的解决方案,称为Qemu Guest Agent,简称qemu-ga。它包含2方面:

▷ channel中传送数据的协议定义:基于JSON的格式

▷ VM内的agent:启动一个名叫qemu-ga的守护进程,该进程将从字符设备里获取传进来的json指令,然后根据指令执行相关命令,并将结果通过字符设备返回给宿主

qemu-ga的好用之处在于其封装的指令兼容了一些不同的操作系统,比如写文件指令guest-file-write,既可以用于linux也可以用于windows。

关于qemu-ga的配置与使用,笔者之前已写过一篇文章《基于QMP实现对qemu虚拟机进行交互》,详细介绍其工作原理及基本使用方法,这里附上地址

https://www.toutiao.com/i6646012291059810823/

由于本文主题是“注入写文件”,因此接下来将重点阐述如何写文件,不过也会将qemu-ga的部署与启用方法再次贴出。

Step1. 为VM配置channel

通过libvirt启动的虚拟机,可以在XML里增加一段配置

注意:上面这段配置要放在段落中

Step2. 部署qemu-ga

1️⃣ 安装qem

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值