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 ...
随机推荐
- sqlserver数据,将一行某一列字符串的值用“_”分割分别填充到这一行的其他列
分割字符到列DECLARE @a VARCHAR(10)SET @a ='00G-2-1102'SELECT CHARINDEX('-',@a,CHARINDEX('-',@a))SELECT CHA ...
- Python学习日记(三十五) Mysql数据库篇 三
使用Navicate 创建一个连接去使用Mysql的数据库,连接名可以取任意字符但是要有意义 新增一个数据库 填写新数据库名,设置它的字符集和排序规则 新建一个表 增加表中的信息 点击保存再去输入表名 ...
- 程序员的选房神技,GitHub上的房源爬虫
买房,在中国是任何一个年轻人都绕不开都话题.特别是在当下限购摇号等多重政策打压的情况,要选到一个自己心仪的房子可谓难度不小. 而且,伴随着房价上涨的还有房租.买不起房的,想要租个合适的小窝也不容易啊! ...
- VS Code好用到飞起的配置设置
Visual Studio Code是一个轻量级但功能强大的源代码编辑器,可在桌面上运行,适用于Windows,macOS和Linux.它内置了对JavaScript,TypeScript和Node. ...
- 在k8s集群部署SonarQube
目录 1.2.存储环境 1.3.sonarqube版本 2.部署sonarqube 2.1.部署PostgreSQL 2.2.部署SonarQube 2.3.访问检查 SonarQube 是一款用于代 ...
- python3使用WSGI启动服务
WSGI是Web Server Gateway Interface的简称.它不是服务器,python模块,框架,API和任何种类的软件.它仅仅是一个服务器和应用间的接口规范. from wsgiref ...
- 关于缩短cin时间的方法
std::ios::sync_with_stdio(false);
- 类型擦除对Java调用Kotlin的影响
@JvmName: 扩展方法相关: 先来定义一个扩展方法: 好,接下来再来定义一个扩展函数: 此时报错了..看一下错误提示: 其中给的提示有点奇怪,第一个是很明显咱们的扩展函数木有接收参数嘛,为啥提示 ...
- docker学习2-快速搭建centos7-python3.6环境
前言 当我们在一台电脑上搭建了python3.6的环境,下次换了个电脑,或者换成linux的系统了,又得重新搭建一次,设置环境变量.下载pip等操作. 好不容易安装好,一会Scrips目录找不到pip ...
- centos服务器上git clone下载加速
最近在服务器上直接git clone github上的仓库,下载速度只有十几KB,简直不要太慢! 网上搜了一些加速的,自己于是写了下面的总结. 1. nslookup命令 如果执行这个命令找不到,请先 ...