04 - pyrebox Guest Agent

agent的用途是虚拟机和主机之间传输文件和执行文件

和虚拟机之间的通信是通过无效的操作码(invalid opcodes)

Windows

 

可以在guest/win文件夹下找到windows的Guest Agent

 

编译Guest Agent

 

可能需要安装mingw-w64包,比如在Ubuntu或Debian上:

apt-get install gcc-mingw-w64-i686 g++-mingw-w64-i686 mingw-w64-i686-dev mingw-w64-tools gcc-mingw-w64-x86-64 mingw-w64-x86-64-dev g++-mingw-w64-x86-64

 

直接用make来编译,它会产生两个文件:win_agent_32.exe和win_agent_64.exe分别对应32位和64位的windows客户机

 

编译测试文件

 

为了编译测试文件,直接使用提供的Makefile:

make test_32

make test_64

 

Linux

 

可以在guest/linux文件夹下找到linux的Guest Agent

 

编译Guest Agent

 

可能需要安装如下包,比如在Ubuntu或Debian上:

apt-get install libc6-dev-i386

 

直接用make来编译,它会产生两个文件:linux_agent_32.exe和linux_agent_64.exe分别对应32位和64位的linux客户机

 

编译测试文件

 

为了编译测试文件,直接使用提供的Makefile:

make 32bit_test

make 64bit_test

 

用法

 

配置Guest Agent

 

  • 在pyrebox.conf配置文件中增加plugins.guest_agent: True
  • (可选)修改你的Guest Agent文件名字
  • 在pyrebox.conf中增加agent配置
  • 适当调整配置(如果修改了文件名字)
  • 保持agent的配置文件一直存在并保持最新。这个文件会在编译过程中自动产生
  • 将对应的Guest Agent(32或64)拷贝到客户虚拟机中,并且保证它的名字和配置文件中声明的名字一样
    • 一定要拷进去,并且放到自启动的文件夹下,方法见最下面

  • 启动agent(你可以配置虚拟机,使得每次启动系统的时候自动一起启动agent)
  • 一旦agent启动后,就可以进行快照

 

在pyrebox.conf中配置agent的示例:

[AGENT]
name: win_agent_64.exe
conf: win_agent_64.exe.conf

 

使用Guest Agent

 

在脚本中:

  • 在pyrebox.conf配置文件中增加plugins.guest_agent: True或者,
  • 在模块中增加一个叫requirements的成员,这个成员包含一系列需要的插件或者脚本,例如:requirements = ["plugins.guest_agent"]
  • 在脚本中导入插件: from plugins.guest_agent import guest_agent
  • 使用该类的公共接口和Guest Agent进行交互(guest_agent是GuestAgentPlugin的单例实例),详见API

在shell中:

  • 如果没有脚本加载guest_agent插件,则需要通过在pyrebox.conf配置文件中增加plugins.guest_agent: True来确保被加载
  • 使用全局成员agent和Guest Agent进行交互,agent是GuestAgentPlugin的单例实例,详见API

 

只用这样:


> agent.copy_file(src_path, dest_path)

> agent.execute_file(path, args=[], env={}, exit_afterwards=False)

 

示例

 

示例脚本中提供了一个自定义的命令,这个命令记录了怎么在pyrebox脚本中使用agent。

requirements = ["plugins.guest_agent"]成员允许你具体说明脚本需要加载Guest Agent插件才能运行。

 

将win_agent_32.exe拷贝进pyrebox的qemu的方法:

 

先进入虚拟环境

1 . 安装qemu的工具,apt install qemu-utils

2 . 然后进入pyrebox的文件夹中执行以下命令:qemu-img create -f raw usb_image_template.img 256M,这样一来就创建了一个usb镜像模版

3 . 启动pyrebox的qemu虚拟机,记得启动qemu时要加-usb参数来允许虚拟机支持外部usb设备。虚拟机启动后执行:

      (qemu) drive_add 0 if=none,id=stick,file=usb_image_template.img,format=raw

      (qemu) device_add usb-storage,id=stick,drive=stick

4 . 执行以上命令后会在虚拟机里显示有一个usb设备被识别,但是在我的电脑里面看不到这个磁盘,这时需要对这个usb设备分配区域和格式化

5 . 这时进入控制面板->管理工具->计算机管理下的磁盘管理,可以看到那个名字叫做磁盘1的那个usb设备,而且设备的251MB空间都是未指派的状态

6 . 右键那块未指派的空间,选择新建磁盘分区,下一步,选择扩展磁盘分区,下一步直到完成,这样未指派的空间就变成了绿色的可用空间

7 . 继续选择那块可用空间,选择新建逻辑驱动器,一直下一步直到,在格式化分区中选择“按下面的设置格式化这个磁盘分区”,我的文件系统选的是FAT32,然后勾选了下面的执行快速格式化,直到完成。usb设备被格式化成功后,从可用空间,变成了新加卷,这时可以在我的电脑里面看到模拟的u盘

8 . 在右下角选择“安全删除USBMass Storage Device - 驱动器E”,然后安全移除了硬件

9 . 然后在qemu命令中执行以下命令来移除模拟u盘:(qemu) device_del stick

10 . 如果不太确定有没有移除usb设备,可以在qemu环境中用命令info usb查看usb设备状况,什么都没有就是安全移除了

11 . usb_image_template.img就成为了一个有用的usb模拟设备模版,要好好保存留作备用

12 . 将上面的模板拷贝成一个新文件叫做usb_image.img,然后挂载并修改这个新文件

13 . 挂载的注意事项:

        命令:mount-o loop,offset=xxx usb_image.img /mnt/location

        这个命令中的偏移offset = xxx是需要手动计算的,计算方法:

        1 . 先用fdisk查看img文件的信息:fdisk-l usb_image.img

        2 . 可以看到block-size是512,然后start-block是16128,所以偏移是16128 x 512 = 8257536,这个数字替换上面的xxx

        这样一来就成功将mnt/location文件夹挂在到虚拟的usb镜像上

        3 . 此时就可以把win_agent_32.exe拷贝到mnt/location文件夹下

        4 . 然后取消挂载:umount /mnt/location,这样挂载就完成了

14 . 然后再将已经把文件拷贝进去的虚拟u盘和客户虚拟机连接:

       (qemu) drive_add 0 if=none,id=stick,file=usb_image.img

               执行完这一句会提示一句警告,意思是没有指定镜像的格式,自动检测镜像格式会很危险:

               Imageformat was not specified

               不用管它,只要最后一行是OK就行

       (qemu) device_add usb-storage,id=stick,drive=stick

15 . 此时就可以在虚拟机上看到存放着目标文件的u盘了,就可以将u盘文件拷贝到虚拟机上了

16 . 还是安全弹出u盘,再用(qemu) device_del stick卸载一下

17 . 然后把win_agent_32.exe放到系统自启动文件夹里即可,这样每次系统启动了就会自动调用这个可执行文件

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值