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 镜像密码修改办法的更多相关文章

  1. kvm虚拟机操作相关命令及虚拟机和镜像密码修改

    虚拟机生命周期管理 1)查看kvm虚拟机状态 #virsh list --all 2)KVM虚拟机开机 # virsh start oeltest01 3)KVM虚拟机关机或断电 关机 默认情况下vi ...

  2. 修改官方发行openstack镜像的cloud-init登录方式为账号密码登录

    openstack使用的镜像多为qcow2格式,各个发行商也开源了针对openstack制作的镜像.但是这些镜像的登录方式都是注入用户名和密码的方式,就是说不能够直接通过账号和密码登录.那么如何将一个 ...

  3. 修改openstack镜像--支持root密码登陆

    一.前言 从openstack官方下载的云镜像一般都是普通用户密钥登陆,比如centos镜像的普通用户为centos,ubuntu镜像的普通用户为ubuntu,虽然密钥登陆系统相比密码登陆来说比较方便 ...

  4. openstack Q版部署-----虚拟机密码修改问题

    一.修改镜像密码 1.打开一个要修改的镜像 随便找一台centos服务器 [root@linux-node1 ~]#wget http://cloud.centos.org/centos/7/imag ...

  5. 如何修改openstack虚拟机密码

    1.虚拟机创建时设置密码 计算节点安装以下软件包 yum install libguestfs python-libguestfs libguestfs-tools-c 配置计算节点nova配置文件/ ...

  6. OpenStack 镜像制作之cloud-init

    Contents [hide] 1 背景 2 密钥登录 2.1 密钥登录的原理 2.1.1 openstack的私钥 2.1.2 密码注入 = 2.1.3 实际遇到的情况 2.1.4 解决办法 背景 ...

  7. 制作Ubuntu14.04的Openstack镜像

    下载好Ubuntu官方镜像安装文件:不要使用desktop版,在virtualbox和vm上都安装报错,因为不需要桌面,所有没去管了. 第一步.准备好如下文件: 1.ubuntu-14.04.4-se ...

  8. 完整部署CentOS7.2+OpenStack+kvm 云平台环境(4)--用OZ工具制作openstack镜像

    在部署openstack云平台环境的时候,需要上传镜像到glance. 首先下载iso镜像,这里下载了centos6.5镜像,放到/usr/local/src目录下然后用OZ工具制作openstack ...

  9. Windows忘记BIOS密码/操作系统密码处理办法汇总

    一.说明 关于电脑,在大学之前是知之甚少的.举几个例子,一是刚上大学时我还是分不清主机和显示器哪个才是电脑:二是应该是大一上学期陪窒友Z到电科买电脑,我问导购员XP和Win7什么关系----我一直怀疑 ...

随机推荐

  1. Aptana Studio 3的汉化

    Aptana Studio 3(下面简称Aptana 3)的汉化方法 1.找到这个网站 http://aptana.com/support 2.单击下面的链接 view documentation 在 ...

  2. Scrambled Polygon---poj2007(利用叉积排序)

    题目链接:http://poj.org/problem?id=2007 题意:乱序给出凸多边形的顶点坐标,要求按逆时 针顺序输出各顶点.给的第一个点一定是 (0,0),没有其他点在坐标轴上,没有三点 ...

  3. windows 访问 ubuntu虚拟机 django服务器 失败

    配置ubuntu配置成桥接,在ubuntu虚拟机中运行django.py开发服务器.windows访问django失败. 虚拟机运行: python manage.py runserver 0.0.0 ...

  4. Android各个版本 版本号对应关系表

    Platform Version API Level VERSION_CODE Notes Android 5.0 21 LOLLIPOP Platform Highlights Android 4. ...

  5. Java数据库连接——JDBC调用存储过程,事务管理和高级应用

    一.JDBC常用的API深入详解及存储过程的调用 相关链接:Jdbc调用存储过程 1.存储过程(Stored Procedure)的介绍 我们常用的操作数据库语言SQL语句在执行的时候需要先编译,然后 ...

  6. js markdown chart flow

    http://knsv.github.io/mermaid/#example-of-a-marked-renderer

  7. Perforce 使用笔记

    Perforce requires at least two executables: the server (p4d), and at least one Perforce client progr ...

  8. class属性中为什会添加非样式的属性值?

    来由 在一些插件中经常看到, 在class属性中出现一些跟样式无关的属性值, 这些值在css样式中没有对应定义, 但是在js中会根据这个值来给dom对象添加特殊的行为, 例如: jquery vali ...

  9. ajax请求后加额外的数据

    $.ajax({ cache: true, type: "POST", url:"${ctx!}/bus/trail/getTrailInfoById", da ...

  10. The Struts dispatcher cannot be found. This is usually caused by using Strut

    The Struts dispatcher cannot be found. This is usually caused by using Struts tags without the assoc ...