设为首页 收藏本站
查看: 1137|回复: 0

[经验分享] openstack changePassword

[复制链接]

尚未签到

发表于 2017-6-24 22:33:28 | 显示全部楼层 |阅读模式
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=kvminject_password = true #addinject_partition = -1  #addrestart 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 diskguestfish可以打开一个虚机镜像,如果打开失败,一般是权限问题,那么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.pyindex 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 = Truepw_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" % passwordelse: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-devmkdir /opt/source/ && cd /opt/sourcegit clone https://github.com/libvirt/libvirt-python.git && cd libvirt-pythongit checkout v1.2.16 -b v1.2.16python setup.py buildpython 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 t72New password:Again:libvirt-set-admin-password 最大的优势在于他可以在任何时候去修改虚机系统密码,而不像前两种方式, 只能在初始化阶段做,但是对相关依赖组件的版本要求也是硬伤。

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-387729-1-1.html 上篇帖子: 告诉你一个真实的OpenStack:都谁在用,用来干什么? 下篇帖子: Docker集群实验环境布署--swarm【1 架构说明】
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表