zz775520666 发表于 2018-5-31 09:23:34

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
  

  

  

  

  

  

  

  
页: [1]
查看完整版本: openstack镜像之Windows(可重置密码)