openstack重设虚拟机实例密码
目录结构:
引出
- 要解决的问题很明确:就是如果虚拟机的连接采用用户名密码登录的方式,而密码忘记的话,需要采取什么手段解决。
- 其实解决方案是要取决于真实的生产环境,虚拟化方式的不同,初始化虚拟机密码方式的不同,openstack版本的不同,都会造成某个方案的可行不可行。以下几种方案可能或多或少会出现无法实现的情况,楼主尽量把条件讲清楚。
采用 nova get-password 方式
- 利用nova 提供的这个接口可以获取instance的password,就不用密码reset了。
- 适用条件:虚拟化方式为XEN,不支持libvirt.
采用 libvirt-set-admin-password
- Openstack L 版本新加入的功能,直接使用 “nova set-password “(或早期版本client的”nova root-password”) 就可以,之前的版本该命令不支持Libvirt,仅支持XEN。
- 适用条件:Openstack Libvirt+ 版本,宿主机libvirt版本1.2.16+,虚拟机镜像安装2.3+ 版本的qemu-guest-agent,详见虚拟机系统密码的修改方案¶
- 博主试验了linux 几个主要版本(debian,ubuntu,centos),只要满足以上的限制条件,都能修改成功,不过官网提供的cloud 版本镜像大都没有安装 qemu-guest-agent,或者版本太低,需要自己安装并制作成镜像。windows 的镜像相对比较麻烦点,宿主机装的virtio-win,通过文件挂载的方式给guest安装对应驱动和QGA,其实不用安装也可以,实现最终都是guest 安装virtio-serial驱动,然后安装quemu-guest-agent就可以了,还有一点就是要设置镜像的property ,例如:hw_qemu_guest_agent=yes,os_type=windows。
参考Running the QEMU Guest Agent on a Windows Guest,Can I have virtio-win package on CentOS
CentOS 7.1 QEMU guest agent 安装 与 使用 (注:这篇文章有点过时了,因为QGA以及驱动的版本已经升级了好几版,大部分功能都已经实现,比如密码修改等,但是整个流程是一致的)
- 关于qemu-guest-agent ,可以参考nova 通过 qemu-guest-agent 修改用户密码
采用 nova image-create / nova rebuild的方式
- 如果虚拟机是根据user-data来设定初始密码的,那么cloud-init只在第一次创建虚拟机执行一次,以后不会执行(reboot也不会执行)。那么我们也只能再次launch一下,方法如下。
首先对当前虚拟机做一次snapshot.


利用该snapshot ,设定好user-data重新boot 一个新的虚拟机

注意:此处只是保证系统盘数据是不变的,如果是数据盘的话还要将对应的数据盘detach再attch到新建的虚拟机中。当然,如果虚拟机是直接用的adminPass的话(即injectPassword的方式)也可以直接利用rebuild命令(rebuild只能用于image启动的instance,而不能用于volume
启动的instance)。这种方法其实比较笨拙,不到万不得已一般不会这么做。
采用 cloud-init 的方式
- 这种方法算是所有方法里面最轻便的,但坏处是需要自己定制脚本。对于cloud-init,不熟悉的话可以先翻一下官方手册
- 原理很简单:借助cloud-init,在虚拟机启动的时候开启一个服务,用来监测metadata中设定的某个值,如果该值发生改变(或者满足其他条件)即做出密码更改的动作并reboot。
- 可喜的是,我在github找到了类似的代码openstack-password-reset ,不过这个代码只是考虑了RH7系列,而且密码是随机生成的,如果再推给openstack,可能更复杂了。我又更改一下脚本,支持更多Linux版本,且把重设后的密码定死了。年后会把改过的代码挂到github上。
- 这里面的reset Python程序是通过外链获取的,于是干脆在nova里加了一个API,用来获取该程序。
- 如果是传递多个文件给cloud-init的话,需要使用MIME的格式,tips:一般是把多个脚本/cloud-config文件 打包成MIME格式文件,然后压缩成gzip格式,传给cloud-init。
参考文章
END
openstack重设虚拟机实例密码的更多相关文章
- mysql重设root的密码 mac
创建: 2017/09/14 第一步: 关闭已开启的mysql服务器 mysql.server stop 第二步: 关闭密码识别模式 /usr/local/bin/mysqld_safe ...
- 重设域管理员密码-window server 2008 R2
How to Reset Your Forgotten Domain Admin Password on Server 2008 R2 Forgetting your password is alwa ...
- 重设Windows 7密码 z
Restart the computer to boot using the CD. Once the GUI loads, press SHIFT+F10 to bring up the comma ...
- 忘记树莓派pi账户密码简单重设
网上搜到的教程多是要修改cmdline.txt,非常繁琐,其实树莓派本身的root账户还没有启用,在root账户下重设pi的密码是很容易的,下面教你启用root账户,一切都需要在树莓派本机上操作 打开 ...
- Ubuntu 12.04 root账户开启及密码重设
以普通用户登录,root账号的开启.关闭和密码设置,命令如下: sudo passwd -u root # 启用root账户 sudo passwd root # 设置root 密码(包括重设) su ...
- 忘记root密码时如何重设密码
哈哈,太久没用linux了,把自己的登陆密码给忘了.今天找了下方法如何重设密码以登陆系统. 此文仅以作备忘. 忘记linux密码时,可以使用单用户模式进入linux,修改root密码.1.在linux ...
- 重设msyql数据库root密码
重设密码的方法: 具体方法是: 1.先在安装目录找到my.ini配置文件,打开配置文件, 找到[mysqld]一行,在下面添加skip-grant-tables后保存该文件 重新启mysql动服务; ...
- OpenStack实践系列⑥构建虚拟机实例
OpenStack实践系列⑥构建虚拟机实例 四.创建一台虚拟机图解网络,并创建一个真实的桥接网络 创建一个单一扁平网络(名字:flat),网络类型为flat,网络适共享的(share),网络提供者:p ...
- MySQL5.7使用错误解决:ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: NO)【取消或重设root密码】
解决方法: 最简单方法: ⑴打开mysql中的my.ini(如果没有就将my-default.ini复制一份,并修改为my.ini): ⑵在[mysqld]下面空白行直接添加skip-grant-ta ...
随机推荐
- GitHub Java项目推荐|功能丰富的 Java 工具包|提高开发效率
GitHub Java项目推荐|功能丰富的 Java 工具包|提高开发效率 功能丰富的 Java 工具包.它帮助我们实现了常用的工具方法,从而减少代码的体积,提高开发效率.该项目最初是作者工作项目中的 ...
- sqlserver数据,将一行某一列字符串的值用“_”分割分别填充到这一行的其他列
分割字符到列DECLARE @a VARCHAR(10)SET @a ='00G-2-1102'SELECT CHARINDEX('-',@a,CHARINDEX('-',@a))SELECT CHA ...
- day 19 作业
今日作业 1.什么是对象?什么是类? 对象是特征与技能的结合体,类是一系列对象相同的特征与技能的结合体 2.绑定方法的有什么特点 由对象来调用称之为对象的绑定方法,不同的对象调用该绑定方法,则会将不同 ...
- eclipse svn 提交、更新报错
问题描述: svn: Unable to connect to a repository at URL 'https://test.com/svn/clouds/trunk/fire_Alarm'sv ...
- 使用10046追踪执行计划demo
(一)开启10046追踪 SQL> alter session set events '10046 trace name context forever,level 12'; (二)执行sql语 ...
- RS232、RS485和TTL电平与串行通信
RS232.RS485和TTL 作为一个底层软件开发工程师,经常会碰到RS232.RS485和TTL这一类的问题. 之前总是碰到问题之后Google一下,把当下的问题解决了之后就不管了,过个一两天就忘 ...
- 持久化JS存储
<script src="../../lib/persist-min.js"></script> //测试一下本地化存储器 var store = new ...
- 2019安徽省程序设计竞赛 D.自驾游(最短路)
这道题最后没过,估计是痛失省一了,现在来补一下,当时思路是对的应该是代码出了问题导致样例没过最后nc的除了2,一直WA 题意: 给一张联通图,有两个导航系统,其中一个系统认为第i条边的权值是Pi,另一 ...
- 第9期《python3接口自动化测试》课程,6月29号开学!
2019年 第9期<python3接口自动化测试>课程,6月29号开学! 主讲老师:上海-悠悠 上课方式:QQ群视频在线教学 本期上课时间:6月29号-7月28号,每周六.周日晚上20:3 ...
- python笔记35-装饰器
前言 python装饰器本质上就是一个函数,它可以让其他函数在不需要做任何代码变动的前提下增加额外的功能,装饰器的返回值也是一个函数对象. 很多python初学者学到面向对象类和方法是一道大坎,那么p ...