openstack鏡像之Windows(可重置密碼)


環境聲明:

os windows2008r2

openstack mitaka


   本文修改主機密碼的方式爲 metadata 注入方式,在雲主機內部再配合一個修改密碼、重置密碼的腳本,達到修改、重置雲主機密碼的作用; 目前修改、重置密碼的腳本都是python腳本,所以做此鏡像需要在鏡像中安裝python,pywin32才行,因爲目前測試的結果是,cloud-init在windows系統中,只會在初始化的時候啓動一次,之後便不會再啓動了,所以還有一個重置密碼的腳本,重置密碼的腳本會在系統中生成一個reset-Administrator的系統服務,此服務需要將啓動類型修改爲“延遲自啓”;要是哪位大神看到了,希望可以指點一二


原文鏈接:http://readshlinux.blog.51cto.com/9322509/1902888





1.在kvm中安裝虛擬機

wKiom1i41BGB4qtvAADUxCM7Bk0127.png-wh_50


wKioL1i41ELxgbAKAAGTHL8Rk7k795.png-wh_50



wKioL1i41HOB84RBAAF860LwDes439.png-wh_50


然後開始安裝即可



2.爲kvm中的虛擬安裝虛擬驅動


斷開連接---->掛載virtios-win.iso---->安裝設備驅動


安裝如下3個就ok

viostor

vioserial

NetKVM

wKioL1i41L_AEfZfAACSh35loPY518.png-wh_50


wKioL1i41cDCgM4FAAEsj40wfh0906.png-wh_50


wKiom1i41jOhKdvdAAOSyvd4IP4700.png-wh_50


wKioL1i41luymCFaAAAgkLjps04096.png-wh_50



viostor

vioserial

NetKVM


wKioL1i41wXQBycBAAEACJwXCbY467.png-wh_50


wKioL1i41yyQD4vbAAEhM-1aanU762.png-wh_50


雖然出現磁盤了,但是還需要安裝網卡的驅動,繼續


wKioL1i411_CM-rAAAD6uGeYD-g191.png-wh_50


wKioL1i4143xb_nDAAEYf-XkFF0938.png-wh_50




3.繼續安裝系統

斷開virtios-win.iso ----> windows.iso

wKiom1i418_jgCSOAACSh35loPY938.png-wh_50


wKioL1i42BqgReoUAAM3DG2ZH8g413.png-wh_50



安裝完系統之後,需要將系統激活開啓遠程桌面,添加重置密碼的腳本(安裝python python32)第一次修改密碼的腳本安裝cloud-init軟件包  這些操作

=================================================================================================================================================================================================================================================================================



最關鍵的是將這些信息傳入進去

1.在windows系統設置一個共享文件夾

2.在linux系統(kvm宿主機)上掛載改windows系統的共享文件夾

mount //windows_ip/gx /data/gx/ -o username=Administrator,password=Admin@


3.複製相應信息到  linux系統(kvm宿主機)掛載windows共享目錄的磁盤

4.複製信息完成

5.在windows中將該信息放在正確的地方

6.最後卸載linux系統掛載的windows共享文件夾

umount /data/gx/

7.將windows中的共享文件夾刪除(不要在系統中留下不該留的信息)



8.激活windows系統,安裝傳入的python安裝程序,並將python添加到系統環境變量中(在cmd中直接執行python,看會不會進入到pythonide的界面中),最後安裝“reset26重置密碼”服務,我是直接拷貝到python的安裝目錄,之後解釋用cmd命令切入到reset的目錄中,執行python reset26.py install 即可安裝reset的服務啦


重置密碼腳本

該腳本會在windows services服務中出現一個名爲reset-Administrator的系統服務,注意一定要將他設置爲開機延遲啓動,否則重置不了密碼;



===========================================================================================

#!/usr/bin/env python
#coding:utf8
import os
import json
import urllib
import win32serviceutil
import win32service
import win32event
def get_data():
data = urllib.urlopen("http://169.254.169.254/openstack/latest/meta_data.json").read().decode()
return data
def parse_data(data):
json_data = json.loads(data)
changePasswd = json_data.get("meta").get("changePasswd")
if changePasswd:
adminPass = json_data.get("meta").get("admin_pass")
os.system("net user Administrator /active:yes")
os.system("net user Administrator %s" % adminPass)
class reset(win32serviceutil.ServiceFramework):
_svc_name_ = "reset"
_svc_display_name_ = "reset-Administrator"
def __init__(self, args):
win32serviceutil.ServiceFramework.__init__(self, args)
self.hWaitStop = win32event.CreateEvent(None, 0, 0, None)
def SvcStop(self):
self.ReportServiceStatus(win32service.SERVICE_STOP_PENDING)
win32event.SetEvent(self.hWaitStop)
def SvcDoRun(self):
parse_data(get_data())
win32event.WaitForSingleObject(self.hWaitStop, win32event.INFINITE)
if __name__=='__main__':
win32serviceutil.HandleCommandLine(reset)


===========================================================================================




windows添加環境變量

我的電腦---->屬性---->高級系統設置---->系統屬性---->高級---->環境變量---->添加到Path後就ok

看不懂自行百度、谷歌



cmd命令行中,執行services.msc 進入到系統的服務目錄,查看有沒有reset-Administrator的一個服務,並將屬性中的常規啓動類型修改爲“自動(延遲啓動)”,還有恢復中的 第一次失敗到第最後一次失敗   都修改爲重新啓動服務   即可



9.安裝cloud-init服務,

wKiom1i42PqhgNnBAABhmw5cGpo019.png-wh_50


快安裝完時,把腳本添加到

C:\Program Files\Cloudbase Solutions\Cloudbase-Init\LocalScripts\

即可


修改密碼腳本

===========================================================================================

# -*- coding:utf-8 -*-
import os
import json
import urllib.request
def get_data():
data = urllib.request.urlopen("http://169.254.169.254/openstack/latest/meta_data.json").read()
return data
def parse_data(data):
data1 = str(data)
json_data = json.loads(data.decode())
changePasswd = json_data.get("meta").get("changePasswd")
if changePasswd == "True":
adminPass = json_data.get("meta").get("admin_pass")
os.system("net user Administrator /active:yes")
os.system("net user Administrator %s" % adminPass)
data = get_data()
parse_data(data)

===========================================================================================



wKiom1i42RaQcRGPAAJIEY0ih9E324.png-wh_50


最後把兩個鉤都打上就ok啦,這個服務會自動清理歷史命令,mac地址,ip地址等 

最後記得把cloud-init這個包刪除,在點擊finish之後,立馬刪除就ok



顯示kvm中所有虛擬機

virsh list --all

在kvm中刪除虛擬機,僅僅刪除xml文件,不會刪除鏡像文件

virsh undefine windows

將鏡像壓縮

qemu-img convert -c -O qcow2    壓縮之前的路徑+名字 壓縮之後的路徑+名字



參考文檔:https://docs.openstack.org/image-guide/windows-image.html

參考文檔:http://www.cnblogs.com/eineseite/archive/2009/07/02/1515388.html

參考文檔:https://kurisu.love/index.php/archives/47/

參考文檔:http://www.bubuko.com/infodetail-705509.html

參考文檔:http://blog.csdn.net/ghostfromheaven/article/details/8604738









發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章