首页 > 代码库 > openstack镜像之Windows(可重置密码)

openstack镜像之Windows(可重置密码)


环境声明:

os windows2008r2

openstack mitaka


   本文修改主机密码的方式为 metadata 注入方式,在云主机内部再配合一个修改密码、重置密码的脚本,达到修改、重置云主机密码的作用; 目前修改、重置密码的脚本都是python脚本,所以做此镜像需要在镜像中安装python,pywin32才行,因为目前测试的结果是,cloud-init在windows系统中,只会在初始化的时候启动一次,之后便不会再启动了,所以还有一个重置密码的脚本,重置密码的脚本会在系统中生成一个reset-Administrator的系统服务,此服务需要将启动类型修改为“延迟自启”;要是哪位大神看到了,希望可以指点一二


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





1.在kvm中安装虚拟机

技术分享


技术分享



技术分享


然后开始安装即可



2.为kvm中的虚拟安装虚拟驱动


断开连接---->挂载virtios-win.iso---->安装设备驱动


安装如下3个就ok

viostor

vioserial

NetKVM

技术分享


技术分享


技术分享


技术分享



viostor

vioserial

NetKVM


技术分享


技术分享


虽然出现磁盘了,但是还需要安装网卡的驱动,继续


技术分享


技术分享




3.继续安装系统

断开virtios-win.iso ----> windows.iso

技术分享


技术分享



安装完系统之后,需要将系统激活开启远程桌面,添加重置密码的脚本(安装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服务,

技术分享


快安装完时,把脚本添加到

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)

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



技术分享


最后把两个钩都打上就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









本文出自 “RSLinux” 博客,请务必保留此出处http://readshlinux.blog.51cto.com/9322509/1902888

openstack镜像之Windows(可重置密码)