OpenStack 镜像密码修改办法
| Contents [hide] |
|---|
场景
用户将实例里的root密码修改了,/root/.ssh/的公钥文件删除了,然后把密码忘记了,需要重置密码功能。
方案一
镜像里做一个修改密码的http服务,打开一个端口,实例里该服务一直运行,如果接受到来自管理平台的IP地址的该请求,修改密码。 效果:不需要重启服务器,需要开一个端口服务。 甚至可以扩展服务做监控使用。 可能的问题:如果用户停掉该服务,则需要将该服务加入开机启动,重启后才能够修改密码,如果用户直接将开机启动脚本也删除了,则不能修改密码。另外可能的安全问题。
方案二
基于wget http://169.254.169.254/openstack/latest/meta_data.json能获取到实例的meta数据,里面有原本的证书内容:
{"random_seed": "FnlR1A40eQSomVBFczvjNGUbjq+0+bQ+8I04T2EpD2lycYrWcBNHcTC1VfUvq2IFlZ8WtM6jMM6l3YJ3h2J0gl25beFdz5EP5i1ZQ6+T4Ho7/HAbV7Q80Zjr0BukmC8QGbyNyZRuNObg597pFAdt2eeqF0dpUq9IuZn/lKLZwmiC4kZGc SC62XZ2I0um3qzk1pxmEW4rl+SG8fp6rQNmpcYLYk/vky/FX+pYpt7ObyJqkFVY66XbMUldx2fUgEexA9kO3Slf31+1odfM/BTXbTc0ThrhMkVC1JXnDPWlldnnHA2cNTWHJtdqG8MR91etBUqsBt2W09xMK1BKz+IoB7OXHKNFFaAO1uwjbjyUY9pyqqckLCM Q9Tqwj9xBfZ92Ja7BfRIEaF+eDu9xkNxANae6ZGZZ1XLImFjLvbkrBjBJQ9Ry1WoMkMAAao5IjAJaVt3XjdzO+83qOD2zVa7XM1aKGmJaDsOI2la6Sby8GAd9MdL+lANp7gYalqEECAmcfJeLuVA0zBfY54SVSWm9pN9dWeI10Xe8mnJgTvIjePsYDcWYD3nU4 maBrqL043VkrbjIIyhyIuIbhDYJ1cTvJtacRPq7AM+d/EJ9zy1uXK4OyCDpZpuao7T+jDTl2/QmoJ18kYdbOSXJOXrcdyu6LT08C7CKJCNBO2z+sc9cGAM=", "uuid": "19951b2a-cd26-40fc-862c-0d9b82961bf3", "availability_zone": "no va", "hostname": "tangcl.novalocal", "launch_index": 0, "meta": {"admin_pass": "tangcl2"}, "public_keys": {"tangcl": "ssh-rsa AAAAB3NzaC1yc2EAAAABIwAAAQEA4odTNZEvA6EBWKXDNfwPQytztVrRAnMGFThdq978 2cKn7WHGekKjtVROt+0oIVj9UR95Lpi53jZATr5dmB4tfu6Lbgjnhv0ugmGLwjrW94J9xKlDaDwr10oSnnB1Ux46eN9KfvnrNKMBy2azmvuhQOJjIWQZM0ZvqDf1cBh6fM1Zk0ipJ7NEghoJelvYTy3v9PTrOOBbSiwtsnSqVmFIKTtqwLsKb9uZAz2Zd5eohU lFl/KzPl9AIdotil7wn3H8pCgQDSZbG/5H0hvpq+9a1L9rIgmyVq0+UbQzNeu8g9l2EGn56y1mUlOrAf7mIuUNqLydqZOp3I1vdBz3ESt0nQ== Generated by Nova\n"}, "name": "tangcl"}
管理员通过密钥登录到虚拟机里然后设置密码。 效果:需要重启服务器,而私钥也丢了,就还是不能重置密码。
方案三
: 基于wget http://169.254.169.254/openstack/latest/meta_data.json里的meta内容,
{"random_seed": "DVb03nT4SJaH29wVaXDzfgYX8fwd2HebFiWeDHkNCItcYrUeB+iqtqW8U0055WJ1gCGN8WXS0iUHngUNECSuSszbgpGA873qGV7OHIB6Z+jh4Zm+7hNmk58U3I9/eKgAS1vSw7eCru99+LF1QAc7g8JVd4DHgoUrEc4lnJtaS6h/zI6c1 b+oB2roJ7tdRxqoMaHX529eNoQCeVpNWO56UwGFRUT+wzl4oTEj7saMET3LaNOy08Bg2qXM5DsD/cFZBRRpJfZIuAc48ytRfleSSaaT2hcHlypZv2piycJRvclb7S/jFNua4ZpUIz1nV+QmdTP/dKl7ojETY2Y5r855Q6AEWe/vb+JaQbuiXELnas+3r0GickA pCOXvkw2fN8vWU32bjHFgj3WWAeDBkXw4Vw9Ujz/aYV2K8mAz0YN60JgusT2WltjfYhUdEYjiANVwpzqGwhGvqn3whbzsa9miJlHjZeTxM2nkBQhkgoWoJOkjt+eBEf/SrCnNMrrGhSr+Pad1ZdUJrYNABgdaeuLivddGtvkCGmM4qQhKlAjhNndt5jggrthit sIsFT9F23MUHcoI2VxKLOWHRuaqrI7n8jd/aRlZJswpFAkNSrTCbEwEZJ/dcVWVPGr9iBoq4tQwUGsWrcJr6HFkVPMaH0yVIhYTO4ntAxNv4slnO+iyV6Q=", "uuid": "19951b2a-cd26-40fc-862c-0d9b82961bf3", "availability_zone": "no va", "hostname": "tangcl.novalocal", "launch_index": 0, "meta": {"admin_pass": "tangcl3", "changePasswd": "True"}, "public_keys": {"tangcl": "ssh-rsa AAAAB3NzaC1yc2EAAAABIwAAAQEA4odTNZEvA6EBWKXD NfwPQytztVrRAnMGFThdq9782cKn7WHGekKjtVROt+0oIVj9UR95Lpi53jZATr5dmB4tfu6Lbgjnhv0ugmGLwjrW94J9xKlDaDwr10oSnnB1Ux46eN9KfvnrNKMBy2azmvuhQOJjIWQZM0ZvqDf1cBh6fM1Zk0ipJ7NEghoJelvYTy3v9PTrOOBbSiwtsnSqVm FIKTtqwLsKb9uZAz2Zd5eohUlFl/KzPl9AIdotil7wn3H8pCgQDSZbG/5H0hvpq+9a1L9rIgmyVq0+UbQzNeu8g9l2EGn56y1mUlOrAf7mIuUNqLydqZOp3I1vdBz3ESt0nQ== Generated by Nova\n"}, "name": "tangcl"}
设置meta:{“changPasswd":True,"adminPass":"tangcl2"},在/etc/rc.local里编写一个脚本,主要是开机启动请求wget http://169.254.169.254/openstack/latest/meta_data.json,以远程请求的为如果检查到里面的changePasswd为True,表示需要修改密码,使用admin_pass修改密码。如果为changePasswd为False,不修改密码。 基本流程:在管理平台使用nova meta admin_pass=tangcl2 changepasswd=True,设置meta,在重启服务器,执行到修改密码的脚本,密码可修改成功。一旦修改成功后重新设置changePasswd 可能的问题,一旦修改meta后changePasswd就为True,则以后该实例重启都会修改密码,需要重新设置changePasswd=False,需要一个地方标记做修改,同时要易于理解。如果做成一键修改,在实例重启后无法验证是否执行了修改脚本而在管理平台提前执行了标记False。
目前采用方案三
在镜像模板的/usr/bin/下添加文件resetroot,内容为:
#! /usr/bin/python import os
import json
import urllib def get_data():
data = urllib.urlopen("http://169.254.169.254/openstack/latest/meta_data.json").read()
return data def parse_data(data):
json_data = json.loads(data)
changePasswd = json_data.get("meta").get("changePasswd")
if changePasswd == "True":
adminPass = json_data.get("meta").get("admin_pass")
os.system("echo 'root:%s' | chpasswd" % adminPass) data = get_data()
parse_data(data)
在/etc/rc.local上添加一行resetroot
导出该镜像模板,用该模板使用openstack创建一台虚拟机. 使用nova meta ddfs set changePasswd=True admin_pass=tangcl55 设置密码,重启虚拟机后密码修改。 需要在使用nova meta ddfs set changePasswd=False,否则以后虚拟机重启都要修改一次密码。
OpenStack 镜像密码修改办法的更多相关文章
- kvm虚拟机操作相关命令及虚拟机和镜像密码修改
虚拟机生命周期管理 1)查看kvm虚拟机状态 #virsh list --all 2)KVM虚拟机开机 # virsh start oeltest01 3)KVM虚拟机关机或断电 关机 默认情况下vi ...
- 修改官方发行openstack镜像的cloud-init登录方式为账号密码登录
openstack使用的镜像多为qcow2格式,各个发行商也开源了针对openstack制作的镜像.但是这些镜像的登录方式都是注入用户名和密码的方式,就是说不能够直接通过账号和密码登录.那么如何将一个 ...
- 修改openstack镜像--支持root密码登陆
一.前言 从openstack官方下载的云镜像一般都是普通用户密钥登陆,比如centos镜像的普通用户为centos,ubuntu镜像的普通用户为ubuntu,虽然密钥登陆系统相比密码登陆来说比较方便 ...
- openstack Q版部署-----虚拟机密码修改问题
一.修改镜像密码 1.打开一个要修改的镜像 随便找一台centos服务器 [root@linux-node1 ~]#wget http://cloud.centos.org/centos/7/imag ...
- 如何修改openstack虚拟机密码
1.虚拟机创建时设置密码 计算节点安装以下软件包 yum install libguestfs python-libguestfs libguestfs-tools-c 配置计算节点nova配置文件/ ...
- OpenStack 镜像制作之cloud-init
Contents [hide] 1 背景 2 密钥登录 2.1 密钥登录的原理 2.1.1 openstack的私钥 2.1.2 密码注入 = 2.1.3 实际遇到的情况 2.1.4 解决办法 背景 ...
- 制作Ubuntu14.04的Openstack镜像
下载好Ubuntu官方镜像安装文件:不要使用desktop版,在virtualbox和vm上都安装报错,因为不需要桌面,所有没去管了. 第一步.准备好如下文件: 1.ubuntu-14.04.4-se ...
- 完整部署CentOS7.2+OpenStack+kvm 云平台环境(4)--用OZ工具制作openstack镜像
在部署openstack云平台环境的时候,需要上传镜像到glance. 首先下载iso镜像,这里下载了centos6.5镜像,放到/usr/local/src目录下然后用OZ工具制作openstack ...
- Windows忘记BIOS密码/操作系统密码处理办法汇总
一.说明 关于电脑,在大学之前是知之甚少的.举几个例子,一是刚上大学时我还是分不清主机和显示器哪个才是电脑:二是应该是大一上学期陪窒友Z到电科买电脑,我问导购员XP和Win7什么关系----我一直怀疑 ...
随机推荐
- LightOj1137 - Expanding Rods(二分+数学)
题目链接:http://lightoj.com/volume_showproblem.php?problem=1137 题意:有一根绳子的长度为l,在有温度的情况下会变形为一个圆弧,长度为 l1 = ...
- XLST
xlst转换 // 读入源请求和mapping配置 StreamSource xmlSource = new StreamSource(new InputStreamReader(new ByteAr ...
- App Store idfa被拒检查办法
最近应用因为这个问题被拒两次,理由如下: PLA 3.3.12We found your app uses the iOS Advertising Identifier but does not in ...
- [转载]快速搭建Spring MVC 4开发环境
(一)工作环境准备: JDK 1.7 Eclipse Kepler Apache Tomcat 8.0 (二)在Eclipse中新建Maven工程,在Archetype类型中,选择“maven-arc ...
- iOS UICollectionView之-(水平滚动)
#import <UIKit/UIKit.h> @interface AppDelegate : UIResponder <UIApplicationDelegate> @pr ...
- 使用Jquery+EasyUI 进行框架项目开发案例讲解之三---角色管理源码分享
使用Jquery+EasyUI 进行框架项目开发案例讲解之三 角色管理源码分享 在上两篇文章 <使用Jquery+EasyUI进行框架项目开发案例讲解之一---员工管理源码分享> ...
- 学习jsp(3)
HttpServletRequest和HttpServletResponse: response.setContentType("text/html;charset=UTF-8") ...
- java Servlet中的过滤器Filter
web.xml中元素执行的顺序listener->filter->struts拦截器->servlet. 1.过滤器的概念 Java中的Filter 并不是一个标准的Servlet ...
- Dictionary中的结构体转出来
CGRect keyBoardFrame = [note.userInfo[UIKeyboardFrameEndUserInfoKey] CGRectValue];
- 输入和输出的总结(c语言)
c语言中有多种的输入和输出方式,下面就简单总结一下: 一.输入的三种方式 (1)scanf scanf 函数可以在变量中使用,也可以在数组中使用,当然指针上也能用到,是一个很好的输入函数.scanf是 ...