写点什么

vSphere 开发指南 1——vSphere Automation API

用户头像
H
关注
发布于: 2 小时前
vSphere开发指南1——vSphere Automation API

前言

VMware vCenter Server 是 VMware 虚拟化管理平台,广泛的应用于企业私有云内网中。站在渗透测试工具开发的角度,我们需要通过命令行实现 vCenter Server 同虚拟机的交互。

本系列文章将要比较多种不同的 API,介绍实现细节,开源代码,实现以下功能:

· 读取虚拟机的配置

· 查看虚拟机文件

· 删除虚拟机文件

· 向虚拟机上传文件

· 从虚拟机下载文件

· 在虚拟机中执行命令

简介

本文将要介绍以下内容:

· 基础知识

· vSphere Automation API 开发细节

· 开源代码 vSphereAutomationAPI_Manage.py

基础知识

1.VMware vSphere

VMware vSphere 是整个 VMware 套件的商业名称,而不是特定的产品或软件。

VMware vSphere 的两个核心组件是 ESXi 服务器和 vCenter Server。

2.ESXi

ESXi 是 hypervsior,可以在其中创建和运行虚拟机和虚拟设备。

3.vCenter Server

vCenter Server 是用于管理网络中连接的多个 ESXi 主机和池主机资源的服务。

vCenter Server 可安装至 Linux 系统中,通过安装 vCenter Server Appliance(VCSA)实现。

vCenter Server 也可安装至 Windows 系统中,通过安装 Vmware Integrated Management(VIM)实现。

 vSphere Automation API 开发细节


为了能够通过命令行实现 vCenter Server 同虚拟机的交互,我们需要使用 vSphere Automation API 中的 vSphere REST API 部分。

VMware 在 vSphere 6.0 版本中引入了 REST API,从 vSphere7.0U2 开始,VMware 宣布弃用旧的 REST API,使用新的 REST API。

经过对比,发现旧的 REST API(低于 vSphere7.0U2)不支持以下操作:

· 查看虚拟机文件

· 删除虚拟机文件

· 向虚拟机上传文件

· 从虚拟机下载文件

· 在虚拟机中执行命令

而新的 REST API 能够满足需求,所以在开发上我们需要先对 vCenter 的版本进行判断,如果满足要求(不低于 vSphere7.0U2),那么才使用 vSphere Automation API。

1.已有的开源代码

Windows 环境加载该脚本的示例命令如下:


脚本执行失败,提示如下:


测试环境 2:192.168.1.2(vCenter 7.0.2)

Windows 环境加载该脚本的示例命令如下:

脚本执行成功。

经过更多的测试后,印证结论:vSphere Automation API 在低版本(低于 vSphere7.0U2)无法实现以下操作:

· 查看虚拟机文件

· 删除虚拟机文件

· 向虚拟机上传文件

· 从虚拟机下载文件

· 在虚拟机中执行命令

2.参考文档用原始数据包实现

在实现上,首先需要发送用户名和明文口令获得 Session,使用 Session 作为登录凭据,进行后续的操作。

具体实现细节如下:

(1)判断 vCenter 的版本

获得粗略版本的方法:

浏览器访问:https://<server_hostname >/sdk/vimServiceVersions.xml

返回结果为 xml 数据,无法获得具体的版本。

获得详细号版本的方法:

访问:https://<server_hostname>/sdk/

正文内容如下:

注:

vSphere 7.0U2 对应对 build 属性为 17630552

(2)Create_Session

添加 Header:

其中,dXNlcm5hbWU6cGFzc3dvcmQ 为 username:password 作 Base64 编码后的结果。

返回结果格式:响应码 201,格式为 application/json 类型。

(3)List_Guest_Processes

请求正文需要 json 格式的数据作为凭据,用来登录虚拟机。

格式示例:

(4)vCenter 同虚拟机传输文件

官方文档描述的不够详细

这里给出我经过测试得出的结论:

1.将文件从本地发送至虚拟机,即向虚拟机发送该文件,先调用 Create_Temporary_Guest_Filesystem_Files 创建指定文件对应的 uri

发送的内容格式如下;

不带有 size 属性。

发送成功后返回该文件对应的 uri,使用 PUT 方法访问 uri,data 字段为发送的文件内容。

2.将该文件从虚拟机发送至本地,即读取虚拟机中的文件,先调用 Create_Temporary_Guest_Filesystem_Files 创建指定文件对应的 uri。

发送的内容格式如下;

必须带有 size 属性。

发送成功后返回该文件对应的 uri,使用 GET 方法访问 uri,在获取文件内容时需要区分文本格式和二进制格式,文本格式可以使用 r.text 读取,二进制格式可以使用 r.content 读取。

开源代码

代码适用版本:vSphere 7.0U1+

支持以下功能:

· 读取虚拟机的配置

· 查看虚拟机文件

· 删除虚拟机文件

· 向虚拟机上传文件

· 从虚拟机下载文件

· 在虚拟机中执行命令

具体命令如下:

· ListVM

· GetVMConfig

· ListHost

· ListVMProcess

· CreateVMProcess

· KillVMProcess

· ListVMFolder

· DeleteVMFile

· DownloadFileFromVM

· UploadFileToVM

其中,对于虚拟机的操作,支持 Windows 和 Linux 系统

 小结

本文介绍了通过 vSphere Automation API 实现 vCenter Server 同虚拟机交互的方法,开源实现代码 vSphereAutomationAPI_Manage.py,记录开发细节。

对于 vSphere Automation API,有些操作不支持低版本的 vCenter(<vSphere7.0U2),导致通用性不够,所以下篇文章将要介绍更为通用的实现方法。


用户头像

H

关注

还未添加个人签名 2021.07.04 加入

想白嫖网安学习资料的,扣我

评论

发布
暂无评论
vSphere开发指南1——vSphere Automation API