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. sublime text主要快捷键列表

    Ctrl+L 选择整行(按住-继续选择下行)Ctrl+KK 从光标处删除至行尾Ctrl+Shift+K 删除整行Ctrl+Shift+D 复制光标所在整行,插入在该行之前Ctrl+J 合并行(已选择需 ...

  2. 给ul中的li添加事件的多种方法

    给ul中的li添加事件的多种方法 这是一个常见,而且典型的前端面试题 <ul> <li>11111</li> <li>22222</li> ...

  3. 内置对象Global和Math对象

    Global对象Math对象 1.Global对象Global.属性方法或者Global.方法()是无效的,web浏览器将Global作为window对象的一部分加一实现.uri编码——了解2.eva ...

  4. centos7安装openvswitch虚拟交换机

    What is Open vSwitch? Open vSwitch is a production quality, multilayer virtual switch licensed under ...

  5. 采用EaglePHP框架解决分布式集群服务器利用MEMCACHE方式共享SESSION数据的问题

    一.问题起源 稍大一些的网站,通常都会有好几个服务器,每个服务器运行着不同功能的模块,使用不同的二级域名,而一个整体性强的网 站,用户系统是统一的,即一套用户名.密码在整个网站的各个模块中都是可以登录 ...

  6. 在C#中使用json字符串

    http://jingyan.baidu.com/article/6fb756ecd2b051241858fbef.html

  7. mina学习

    长连接表示一旦建立了链接,就可以长时间的保持双方的通讯,例如: socket链接,推送平台. 短链接表示建立链接,完成数据的交换之后,就断开链接,例如: http链接. mina 框架是对socket ...

  8. IntelliJ IDEA 的 Java 热部署插件 JRebel 安装及使用

    JRebel 介绍 JRebel for Intellij JRebel 在 Java Web 开发中, 一般更新了 Java 文件后要手动重启 Tomcat 服务器, 才能生效,  自从有了 JRe ...

  9. git 查看、创建、删除 本地,远程 分支

    1. 查看远程分支 git branch -rorigin/master 2. 查看本地分支 git branch *master 注:以*开头指明现在所在的本地分支 3. 查看本地分支和远程分支 g ...

  10. flock防止重复rsync

    我使用crontab同步一个文件夹时,发现一个问题,我在crontab中设置的1分钟运行一次.但当那个文件夹的内容改变时.1分钟不一定能同步完,但这时第二个rsync进行又起来了. 这个就产生一个问题 ...