openstack changePassword
http://niusmallnan.github.io/_build/html/ 在创建虚拟机时候,通常我们需要让用户填写虚机系统的初始化密码,因为很多人并不习惯使用秘钥方式ssh登录, 设置其用户密码有很多种方式,诸如早期的inject-password,或是借助cloud-init, 甚至L版的 libvirt-set-admin-password 等方式, 本文就来介绍一下这几种方案,以及他们对应的使用场景。 inject方式 inject-passwd默认是被禁用的,因为他的使用场景受限,目前来看只能支持Qcow2镜像格式。 在对应的compute节点上修改nova-compute-conf: #/etc/nova/nova-compute.conf [libvirt] virt_type=kvm inject_password = true #add inject_partition = -1 #add restart nova-compute 修改horizon的配置文件,添加设置密码的界面: OPENSTACK_HYPERVISOR_FEATURES = { 'can_set_mount_point': False, 'can_set_password': True, #here } 通常根据上面的步骤,一般是可以实现ROOT密码注入的,如果失败,可以按照下面的方法调试一下,确保你的机器是安装libguestfs-tools。 建一台虚拟机,然后关闭该虚拟机: $ cd /var/lib/nova/instance/xxxxxxxx/ $ export LIBGUESTFS_DEBUG=1 $ export LIBGUESTFS_TRACE=1 $ guestfish -a disk guestfish可以打开一个虚机镜像,如果打开失败,一般是权限问题,那么nova进行inject-passwd时候也不会成功,可以使用如下方法解决: # root $ update-guestfs-appliance $ usermod -G kvm -a nova $ usermod -G root -a nova $ chmod 0644 /boot/vmlinuz* $ restart nova-compute 大部分OpenStack部署通常会使用Ceph做统一存储支持,这意味着虚机镜像格式是Raw格式,这种情况下inject-password方式就失去作用了。 cloud-init方式 这种方式需要给你的guest os 中的cloud-init组件打个patch,这个patch是这样的: diff --git a/cloudinit/config/cc_set_passwords.py b/cloudinit/config/cc_set_passwords.py index 4ca85e2..5b5cae4 100644 --- a/cloudinit/config/cc_set_passwords.py +++ b/cloudinit/config/cc_set_passwords.py @@ -44,6 +44,12 @@ def handle(_name, cfg, cloud, log, args): else: password = util.get_cfg_option_str(cfg, "password", None) + # use the admin_pass available in the ConfigDrive + if not password: + metadata = cloud.datasource.metadata + if metadata and 'admin_pass' in metadata: + password = metadata['admin_pass'] + expire = True pw_auth = "no" change_pwauth = False @@ -59,6 +65,8 @@ def handle(_name, cfg, cloud, log, args): (user, _user_config) = ds.extract_default(users) if user: plist = "%s:%s" % (user, password) + #add change root password + plist = plist + "\nroot:%s" % password else: log.warn("No default or defined user to change password for.") 由于目前cloud-init还不能读取openstack传进来的admin_pass数据,所以得扩展一下。同时cloud.cfg中也要添加: chpasswd: { expire: False } 这个能保证修改的密码不时过期的,否则vm启动后输入密码,系统让你重新修改才能进入。 boot vm时候,会给你生成一个随机adminPass,使用命令行时候可以看到: nova boot –flavor 1 –image cirros –nic net-id=8b052b4a-840c-4b45-b96e-7980f7fa4a74 –meta key1=test –meta key2=hello vm-meta-inject +————————————–+—————————————+ | Property | Value | +————————————–+—————————————+ | OS-EXT-STS:task_state | scheduling | | image | cirros | | OS-EXT-STS:vm_state | building | | OS-EXT-SRV-ATTR:instance_name | instance-0000001d | | OS-SRV-USG:launched_at | None | | flavor | m1.tiny | | id | e82bf7a2-176e-4f9f-83d5-c3542a7ed48e | | ................................ | adminPass | aPduEQ56Yu3t | | ................................ | tenant_id | 1e888eccf99845f8bcf9a9730c83a669 | | created | 2014-03-14T07:00:48Z | | os-extended-volumes:volumes_attached | [] | +————————————–+—————————————+ 虚机在通过cloud-init获取元数据时可以使用api-metadata、ConfigDrive等方式,而借助cloud-init方式来初始化虚机密码则必须选择ConfigDrive方式, 因为ConfigDrive方式才会把adminPass字段传递给虚机。 libvirt-set-admin-password 这是L版的新特性,这种方式的本质是在虚拟机内部安装qemu-guest-agent来接受相关修改密码的指令,当然这种特性对我们各个中间件的版本是有要求的: libvirt 1.2.16+ 宿主机 python-libvirt 1.2.16+ 宿主机 qemu-guest-agent 2.3+ 虚机内部 使用ubuntu安装L版nova-compute,nova-compute对应的第一个版本是2:12.0.0-0ubuntu2~cloud0,这个版本的依赖包略有瑕疵,不能满足该特性, 主要是python-libvirt的版本太低,升级python-libvirt步骤如下: apt-get install python-dev pkg-config libvirt-dev mkdir /opt/source/ && cd /opt/source git clone https://github.com/libvirt/libvirt-python.git && cd libvirt-python git checkout v1.2.16 -b v1.2.16 python setup.py build python setup.py install 检查此时该包的版本: python -c"import libvirt;print libvirt.getVersion()" output:1002016 虚机内部的qemu-guest-agent版本对应的安装包这里可以找到 https://launchpad.net/ubuntu/+source/qemu 虚机镜像除了要安装qemu-guest-agent外,镜像本身还要设置hw_qemu_guest_agent属性 ../../_images/update_image_metadata.png 环境准备完毕后,启动虚拟机,使用方式如下: root@l-controller-1:~# nova list +--------------------------------------+------------+--------+------------+-------------+---------------------------------------+ | ID | Name | Status | Task State | Power State | Networks | +--------------------------------------+------------+--------+------------+-------------+---------------------------------------+ | b8b59244-72bc-4c7a-9d7c-79a14b4bf91e | t72 | ACTIVE | - | Running | niu-net-1=10.10.0.10, 192.168.252.142 | | 840fd90a-ee5b-422c-aa8f-c1c1c61bbaed | virtio-blk | ACTIVE | - | Running | niu-net-1=10.10.0.11, 192.168.252.145 | +--------------------------------------+------------+--------+------------+-------------+---------------------------------------+ root@l-controller-1:~# nova root-password t72 New password: Again: libvirt-set-admin-password 最大的优势在于他可以在任何时候去修改虚机系统密码,而不像前两种方式, 只能在初始化阶段做,但是对相关依赖组件的版本要求也是硬伤。
posted on 2016-12-21 10:46 秦瑞It行程实录 阅读(...) 评论(...) 编辑 收藏

转载于:https://www.cnblogs.com/ruiy/p/6206767.html

openstack changePassword相关推荐

  1. [网摘学习]在Ubuntu上安装和配置OpenStack Nova之二

    再收藏一份Openstack的文章,这两天的操作与此相同.但其中出现的问题还需要查找原因.待个人继续学习研究. 原文参考:http://www.linuxde.net/2011/11/1599.htm ...

  2. 末学者笔记--openstack共享组件:rabbitmq(3)

    openstack共享组件:消息队列rabbitmq 一.MQ 全称为 Message Queue, 消息队列( MQ )                       是一种应用程序对应用程序的通信方 ...

  3. OpenStack之虚拟机热迁移

    这里的环境是centos7版本,openstack K版 1.在各个计算节点设置权限 chmod 755 /var/lib/nova/instances 2.修改各个节点的nova.conf(/etc ...

  4. linux镜像修改密码,OpenStack 镜像修改密码方案

    现在各大linux厂商,其实已经有专门给openStack提供的镜像,不过国内的朋友,不太习惯老外做镜像的方式,经常问密码是多少.本博客提供几种修改密码方案,仅供参考. 前言 对OpenStack云主 ...

  5. devstack —— 单机部署 OpenStack 体验

    2019独角兽企业重金招聘Python工程师标准>>> devstack 是一个用来快速部署 OpenStack 的脚本. 使用非常简单,执行 ./stack.sh 即可,但是在安装 ...

  6. 《OpenStack实战》——第1章 介绍OpenStack 1.1OpenStack是什么

    本节书摘来自异步社区<OpenStack实战>一书中的第1章,第1.1节,作者: [美]V. K. Cody Bumgardner(V. K. 科迪•布姆加德纳)著,更多章节内容可以访问云 ...

  7. CHUCK手把手带你搞定OPENSTACK

    以下是原文链接:http://blog.oldboyedu.com/openstack/ 转载于:https://blog.51cto.com/bovin/1858198

  8. Openstack组件实现原理 — Keystone认证功能

    前言 Keystone实现始终围绕着Keystone所实现的功能来展开,所以在理解其实现之前,建议大家尝试通过安装Keystone这一个过程来感受Keystone在Openstack架构中所充当的角色 ...

  9. Restore Volume 操作 - 每天5分钟玩转 OpenStack(60)

    前面我们 backup 了 voluem,今天我们将讨论如何 restore volume. restore 的过程其实很简单,两步走: 在存储节点上创建一个空白 volume. 将 backup 的 ...

最新文章

  1. 使用Gearman做分布式计算
  2. HashMap和HashTable区别
  3. Android ANR产生的原理和如何避免
  4. javascript的输入与输出
  5. python爬取图片教程-推荐|Python 爬虫系列教程一爬取批量百度图片
  6. 六十一、Python中的smtplib和email实现邮件发送
  7. 为什么做了梦第二天想不起来_元旦提醒:为什么有人睡觉爱把脚伸到被子外面?其实与身体状况有关…切勿忽视...
  8. ftp连接oracle服务器,使用SSL加密连接FTP - 架建SSL安全加密的FTP服务器(图)_服务器应用_Linux公社-Linux系统门户网站...
  9. elif else if oracle_shell中if做比较
  10. bzoj 5093 [Lydsy1711月赛]图的价值——第二类斯特林数
  11. Confluent修改许可,限制其他云供应商
  12. Nagios 监控twemproxy
  13. JanusGraph概述
  14. 0.96寸OLED屏幕
  15. 技术至简-1:信源编码VS信道编码
  16. python检测网页能否访问
  17. 小米手机通过adb安装应用异常处理
  18. ZigBee的无线通信与网络组建
  19. CFA问题大总结,看了这篇文章,你的问题全解决
  20. 免费天气api_高速稳定的天气数据_高速稳定的天气API接口

热门文章

  1. php调用rpc,AMFPHP php远程调用(RPC, Remote Procedure Call)工具 快速入门教程_PHP教程
  2. 2019文都计算机网络百度云,2019计算机考研|计算机网络知识:计算机网络体系结构...
  3. php 设计模式系列,一看就懂系列之 php设计模式(一)-Go语言中文社区
  4. javadoc解析成java 生成 api文档
  5. jdbc如何使用oracle数据库连接池,使用JDBC连接池技术连接Oracle数据库
  6. 分组卷积计算量_轻量级卷积神经网络的设计技巧
  7. 在linux上安装redis
  8. linux百分比查看文件,Linux 如何查看内存使用率百分比?
  9. flutter html 加载_Flutter开发:项目加载本地html文件的步骤
  10. 如何利用数据挖掘结束单身