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),導致通用性不夠,所以下篇文章將要介紹更為通用的實現方法。
【想學網絡安全嗎,點一下】
總結
以上是生活随笔為你收集整理的vSphere开发指南1——vSphere Automation API的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 老板问我桌面演练(TTX)是什么,我直接
- 下一篇: 你知道吗,NukeSped 通过 Bun