openstack重设虚拟机实例密码

目录结构:

引出

采用 nova get-password 方式

采用 libvirt-set-admin-password

采用 nova rebuild instance 的方式

采用 cloud-init 的方式

引出

  • 要解决的问题很明确:就是如果虚拟机的连接采用用户名密码登录的方式,而密码忘记的话,需要采取什么手段解决。
  • 其实解决方案是要取决于真实的生产环境,虚拟化方式的不同,初始化虚拟机密码方式的不同,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 GuestCan I have virtio-win package on CentOS

CentOS 7.1 QEMU guest agent 安装 与 使用 (注:这篇文章有点过时了,因为QGA以及驱动的版本已经升级了好几版,大部分功能都已经实现,比如密码修改等,但是整个流程是一致的)

采用 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。

参考文章

Password Reset

虚拟机系统密码的修改方案

CloudInit & User-Data

 

END

原文地址:https://www.cnblogs.com/ruiy/p/12061017.html

时间: 2024-08-28 20:41:28

openstack重设虚拟机实例密码的相关文章

重设Windows 7密码 z

Restart the computer to boot using the CD. Once the GUI loads, press SHIFT+F10 to bring up the command prompt. Using the command prompt, we will make a backup of the sticky key sethc.exe program first, and then override it with cmd.exe using the foll

域控制器 忘记密码 如何重设管理员密码?

我学生的客户域控制器管理员密码给忘记了,需要他帮忙重设.使用windowsPE这种工具只能回复不是域控制器的计算机的密码. 下面给大家在虚拟机中演示如何重新设置域控制管理员密码. 进入BIOS,设置成从光驱启动. 进入命令提示符执行以下命令 ren osk.exe osk02.exe ren cmd.exe osk.exe 退出安装程序从硬盘重新引导 可以看到打开就是命令提示符,就可以直接更改管理员密码了就这么简单 充设了密码 别忘了了将以上重命名的文件改回来,否则就给别人留下了后门.

重设root 密码

通过单用户模式重设root账户的密码 通过"急救模式"重设root账户密码

忘记mysql的root密码,如何重设密码

引言:MySQL有时候忘记了root密码不要慌,可以不用原密码就能重设密码 Linux: 1.编辑MySQL配置文件my.cnf vi /etc/my.cnf    #编辑文件,找到[mysqld],在下面添加一行skip-grant-tables [mysqld] skip-grant-tables :wq!  #保存退出 service mysqld restart  #重启MySQL服务 PS:也可以不修改配置文件,直接用以下命令启动MySQL,以不检查权限的方式启动:    safe_M

重设MYSQL密码

1. 管理员登陆系统,停止mysql服务或者结束mysqld-nt进程2. 进入命令行,来到mysql的安装目录.假设安装目录为 d:\mysql\ , CMD进入命令行3. 运行 d:\mysql\bin\mysqld-nt --skip-grant-tables 启动mysql,关闭权限的检查4. 运行 d:\mysql\bin\mysqladmin -u root flush-privileges password "newpassword" 重设root密码5. 重新启动mys

网站开发之用户重设密码 找回密码功能的实现原理

网站开发之用户重设密码 找回密码功能的实现原理,这个东西基本在现在每个系统中都带有的功能,但是实现的方式也是挺多的,这个是跟数据库没多大关系的方法嘞. 用户流程: 1.用户忘记密码,来到密码重设界面 2.用户输入Email地址,点击重设密码按钮 3.用户收到一封密码重设邮件,里面有重设密码的链接,此链接有过期时间 4.用户点击链接,来到密码重设页面,输入新密码,完成 这个流程并没有什么创新,很多网站都是用这套流程 后端实现方式: 1.当用户输入Email地址后,验证这个Email,如果存在于数据

Mac电脑 重设开机密码

1.因为我用的是iMac,所以会有无线鼠标和无线键盘,这个不影响, 2. 3. 4.这里要注意:输入命令:resetpassword 按回车键方可.(可别学我啊 中间可没有空格键) 5.按照提示,在右侧输入完重设密码,再次输入密码等信息,点击储存,这时弹出对话框,点击好,这时候你看到的是之前页面的初始化状态(之前全部填写的信息全部为空),这时点击左上角的苹果标志,点击重启电脑,进入系统输入你之前更改好的密码进入系统,可能会弹出系统密码提示框,这时不用去管它,点击Finder,按住苹果键盘的Opt

创建Windows10 密码重设盘

如果你忘记Windows10的用户密码,则可以通过创建的密码重设盘重新创建一个新的密码.(只能为本地账户创建密码重置盘.) 1.打开"控制面板--用户账户和家庭安全--用户账户",选择"创建密码重置盘": 2.打开忘记密码向导并选择"下一步": 3.选择创建密码重置的磁盘(需要可移动媒体,如:USB闪存驱动器或软盘):选择"下一步": 4.输入当前的用户密码,如果没有,则不需要输入,然后选择"下一步": 5

Web服务器管理系列:9、创建密码重设盘

互联网时代需要记录的密码实在太多了,一不小心可能会忘记,假如服务器的密码忘记了将会是件很麻烦的事. Windows Server 2008 为我们提供了创建密码重设盘的功能: 点击创建密码重设盘: 点击下一步: 选择U盘然后点击下一步: 输入当前用户的密码然后点下一步: 密码重设盘创建成功,下面我们看看Windows Server 2008在我们的U盘上写入了什么: 下面我给大家演示下如何使用密码重设盘: 我们在登录的时候输错一次密码就会出现"重设密码"按钮: 我们点击"重设