QEMU使用Qemu-Guest-Agent传输文件、执行指令等

news/2024/10/22 13:50:26/

简介

之前介绍过qemu传输文件,使用的挂载 / samba方式 :Qemu和宿主机不使用外网进行文件传输。

这是一种方式,这里还有另一种方式:使用Qemu-Guest-Agent,后面简称qga

官网介绍:https://www.qemu.org/docs/master/interop/qemu-ga.html


安装

这里有一篇参考文章,会比我下面介绍的相对复杂一点,但也可以完成操作。

参考文章:https://www.easystack.cn/doc/ComputingService/6.1.1/zh-cn/FAQs/DeployQGA.html

一、Linux的Qemu机器

直接install命令即可,查看上面的参考链接即可。

二、Windows的Qemu机器

Windows的Qemu机器:需要安装好virtio-serial driver,下面详细介绍一下:

首先下载该文件(1积分),这个文件我已经测试了Windows7-10、Centos7-8、Ubuntu16-24可用:Qemu-Guest-Agnet整理包

这是一个Windows整理后的qga包,包含amd64.zip和qemu-ga.zip两个文件,请都解压出来。

1、amd64:首先安装证书,管理员运行cmd,命令:pnputil -I -a vioser.inf

2、qemu-ga:将qemu-ga目录放到C:\Program Files下,管理员运行cmd,命令:qemu-ga -s install

3、然后检查【服务】,是否包含以下两个服务,如果存在,则说明安装成功,将两个内容全部设置为自动启动
QEMU Guest Agent
QEMU Guest Agent VSS Provider

4、验证
转为qcow2上传到linux服务器,运行以下指令(假设该qcow2文件名字为Windows10.qcow2)
运行以下内容

qemu-system-x86_64 -name test -hda Windows10.qcow2 -m 4096M -smp cpus=2,sockets=1 -enable-kvm -netdev user,id=net0 -device e1000,netdev=net0 -chardev socket,path=/tmp/test.sock,server=on,wait=off,id=qga0 -device virtio-serial -device virtserialport,chardev=qga0,name=org.qemu.guest_agent.0 -machine usb=on -device usb-tablet

成功开机后,有可能QEMU Guest Agent服务并没有成功运行,那么此时到【服务】中手动开启,如果能手动开启成功,则没问题(下次就能自动开启了)。

此时,使用命令socat - unix-connect:/tmp/test.sock,连接上以后,输入一些命令测试一下,如:{"execute":"guest-info"}


使用

前面安装没问题以后,就可以用代码去连接socket文件并执行内容了。这里写几个demo

1、获取系统信息

python">import asyncio
import jsonclass QEMUGuestAgent(object):endpoint: strdef __init__(self, endpoint):self.endpoint = endpointasync def execute(self, command, timeout=2.0):try:reader, writer = await asyncio.open_unix_connection(self.endpoint)writer.write(json.dumps(command).encode())response = await asyncio.wait_for(reader.readline(), timeout)writer.close()return json.loads(response)except ConnectionAbortedError:print("ConnectionAbortedError: QEMU Agent功能未开启")return {}except asyncio.TimeoutError:print("TimeoutError: Agent 未安装或运行")return {}async def get_osinfo(self):"""查询虚拟机操作系统版本:param command::return:"""command = {"execute": "guest-get-osinfo"}return await self.execute(command)async def main():if __name__ == '__main__':qga = QEMUGuestAgent("/tmp/test.sock")rv = await qga.get_osinfo()print(rv)

2、上传文件

python">import asyncio
import jsonclass QEMUGuestAgent(object):endpoint: strdef __init__(self, endpoint):self.endpoint = endpointasync def execute(self, command, timeout=2.0):try:reader, writer = await asyncio.open_unix_connection(self.endpoint)writer.write(json.dumps(command).encode())response = await asyncio.wait_for(reader.readline(), timeout)writer.close()return json.loads(response)except ConnectionAbortedError:print("ConnectionAbortedError: QEMU Agent功能未开启")return {}except asyncio.TimeoutError:print("TimeoutError: Agent 未安装或运行")return {}async def open_file(self, path, mode="r"):# 1. 获取文件句柄command = {"execute": "guest-file-open","arguments": {"path": path,"mode": mode}}rv = await self.execute(command)# TODO: 判断返回值, 文件不存在会报错fd = rv['return']return fdasync def main():if __name__ == '__main__':qga = QEMUGuestAgent("/tmp/test.sock")fd = await qga.open_file("C:\\cccc\\1111.txt", mode="w")

其他的比如下载文件、在qemu内执行指令等功能参考:https://www.qemu.org/docs/master/interop/qemu-ga-ref.html。


http://www.ppmy.cn/news/1533265.html

相关文章

超分服务的分量保存

分量说明 分量的概念主要是对于显卡解码,编码和网络传输而言,显卡可以同时进行几个线程,多个显卡可以分布式计算,对分量进行AI识别,比如我们有cuda的显卡,cuda的核心量可以分给不同的分片视频,第…

Linux 进程的基本概念及描述

目录 0.前言 1. 什么是进程 1.1 进程的定义与特性 1.2 进程与线程的区别 2.描述进程 2.1 PCB (进程控制块) 2.2 task_struct 3.查看进程 3.1 查看进程信息 3.1.1 /proc 文件系统 3.1.2 ps 命令 3.1.2 top 和 htop 命令 3.2 获取进程标识符 3.2.1使用命令获取PID 3.2.2 使用C语言…

书生大模型实战训练营 第三期 入门岛

1.Linux 任务一 完成SSH连接与端口映射并运行hello_world.py vscode自带的端口设置功能很方便 2.Python 任务一 实现wordcount函数 任务二 vscode 单步调试

基于SSM+微信小程序的校园二手数码交易平台系统(二手3)(源码+sql脚本+视频导入教程+文档)

👉文末查看项目功能视频演示获取源码sql脚本视频导入教程视频 1、项目介绍 基于ssm微信小程序的校园二手数码交易平台满足了不同用户的功能需求,包括用户、卖家以及管理员,下面对这不同用户的功能需求进行简介。 (1&#xff09…

01.useStateWithLabel

在使用 React 进行开发时,特别是处理多个 useState() 钩子的情况下,调试过程可能会变得复杂。幸运的是,我们可以使用 useDebugValue() 钩子创建一个自定义的 useStateWithLabel 钩子,从而轻松地为这些值添加标签。这种方法可以显著…

828华为云征文|使用Flexus X实例创建FDS+Nginx服务实现图片上传功能

一、Flexus X实例 什么是Flexus X实例呢,这是华为云最新推出的云服务器产品,如下图: 华为云推出的Flexus云服务器X系列,是在华为顶尖技术团队,特别是荣获国家科技进步奖的领军人物顾炯炯博士及其团队的主导下精心研发…

Selenium(1)-webUI自动化环境部署,基本元素定位

web自动化测试环境部署 在正式开启自动化测试之前,我们需要给自动化提供完备的测试环境,需要我们搭建一套完整的运行环境,以便能模拟用户的行为。 首先,我们需要安装python编译器,一个编写代码的工具,如py…

【论文阅读】基于真实数据感知的模型功能窃取攻击

摘要 目的 模型功能窃取攻击是人工智能安全领域的核心问题之一,目的是利用有限的与目标模型有关的信息训练出性能接近的克隆模型,从而实现模型的功能窃取。针对此类问题,一类经典的工作是基于生成模型的方法,这类方法利用生成器…