博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
OpenStack 镜像制作之cloud-init
阅读量:6237 次
发布时间:2019-06-22

本文共 3339 字,大约阅读时间需要 11 分钟。

Contents []

背景

前面我们制作了镜像,并且制作的镜像支持了硬盘的自定义。但是还不够,我们要镜像支持密码注入,支持密钥登录。并且2种登录方式都支持(密钥登录,密码登录)

密钥登录

密钥登录的原理

我们在linux中使用ssh-keygen命令,将在当前用户的默认路径生成.ssh文件夹,并且在该文件夹下存在id_rsa和id_rsa.pub文件,其中id_rsa.pub就是公钥文件,而id_rsa为私钥文件,我们将id_rsa传入到客户端机器,并且按照/etc/ssh/sshd_config中文件的#AuthorizedKeysFile .ssh/authorized_keys 内容,将id_rsa.pub改为id_rsa,那么在客户端使用私钥id_rsa时就可以不用密码登录了。

openstack的私钥

openstack也是使用该原理,生成一对钥匙文件,将公钥注入到虚拟机里的默认用的.ssh/目录下,在dashboard界面下载到私钥文件,在创建虚拟机的时候调用注入key_file接口,就可以实现无密码登录了。

密码注入 =

对于openstack的虚拟实例来说,所谓注入,是将我们输入的密码在计算节点使用nova-compute做加密处理后生成一对类似/etc/passwd和/etc/shadow的内容的字符串,然后使用vfs类型数据对创建的image进行数据替换。达到密码修改的目的。

实际遇到的情况

密码注入后使用ssh不能登陆,使用证书登录后查看/var/log/secure内容也显示密码不正确。另外证书登录也不是想要的root用户,而提示是cloud-user.即不满足使用root用户密码登录,不满足使用root密钥登录

解决办法

密钥登录:主要原因是我们使用cloud-init的配置文件中配置了默认用户为cloud-user,所以在注入密钥的时候也注入到了cloud-user
system_info:   distro: rhel   default_user:      name: cloud-user   paths:      cloud_dir: /var/lib/cloud      templates_dir: /etc/cloud/templates      ssh_svcname: sshd

将name:cloud-user修改为name:root,则可以实现用户以root用户密钥登录。

密码root登录

在完成密钥登录后,注入密码方式始终不能登录。日志跟踪,将计算节点的/usr/lib/python/site-package/nova/virt/下的打印也加上:
<0>Oct 17 05:53:22 node-12 ?182>nova-nova.virt.disk.api INFO: admin_pass:root:x:0:0:root:/root:/bin/bashbin:x:1:1:bin:/bin:/sbin/nologindaemon:x:2:2:daemon:/sbin:/sbin/nologinadm:x:3:4:adm:/var/adm:/sbin/nologinlp:x:4:7:lp:/var/spool/lpd:/sbin/nologinsync:x:5:0:sync:/sbin:/bin/syncshutdown:x:6:0:shutdown:/sbin:/sbin/shutdownhalt:x:7:0:halt:/sbin:/sbin/haltmail:x:8:12:mail:/var/spool/mail:/sbin/nologinuucp:x:10:14:uucp:/var/spool/uucp:/sbin/nologinoperator:x:11:0:operator:/root:/sbin/nologingames:x:12:100:games:/usr/games:/sbin/nologingopher:x:13:30:gopher:/var/gopher:/sbin/nologinftp:x:14:50:FTP User:/var/ftp:/sbin/nologinnobody:x:99:99:Nobody:/:/sbin/nologinvcsa:x:69:69:virtual console memory owner:/dev:/sbin/nologinsaslauth:x:499:76:"Saslauthd user":/var/empty/saslauth:/sbin/nologinpostfix:x:89:89::/var/spool/postfix:/sbin/nologinsshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin<0>Oct 17 05:53:22 node-12 ?182>nova-nova.virt.disk.api INFO: admin_pass:root:$1$CaW09rpP$QP631qFmr7vRL.D95sS4C/:16360:0:99999:7:::bin:*:15980:0:99999:7:::daemon:*:15980:0:99999:7:::adm:*:15980:0:99999:7:::lp:*:15980:0:99999:7:::sync:*:15980:0:99999:7:::shutdown:*:15980:0:99999:7:::halt:*:15980:0:99999:7:::mail:*:15980:0:99999:7:::uucp:*:15980:0:99999:7:::operator:*:15980:0:99999:7:::games:*:15980:0:99999:7:::gopher:*:15980:0:99999:7:::ftp:*:15980:0:99999:7:::nobody:*:15980:0:99999:7:::vcsa:!!:16357::::::saslauth:!!:16357::::::postfix:!!:16357::::::sshd:!!:16357::::::

发现我们的密钥生成为一组文件替换到镜像中的密码文件,生成虚拟机后查看/etc/shadow的密码也差不多相同

admin_pass:root:!!$1$CaW09rpP$QP631qFmr7vRL.D95sS4C/:16360:0:99999:7:::bin:*:15980:0:99999:7:::daemon:*:15980:0:99999:7:::adm:*:15980:0:99999:7:::lp:*:15980:0:99999:7:::sync:*:15980:0:99999:7:::shutdown:*:15980:0:99999:7:::halt:*:15980:0:99999:7:::mail:*:15980:0:99999:7:::uucp:*:15980:0:99999:7:::operator:*:15980:0:99999:7:::games:*:15980:0:99999:7:::gopher:*:15980:0:99999:7:::ftp:*:15980:0:99999:7:::nobody:*:15980:0:99999:7:::vcsa:!!:16357::::::saslauth:!!:16357::::::postfix:!!:16357::::::sshd:!!:16357::::::

主要不同是root:后面多了2个!!,表示使用了passwd -l root,将root用户锁定了。 分析应该是cloud-init在启动后做了锁定的工作,参阅,可以看到配置文件中加上lock_passwd:False就可以了

转载于:https://www.cnblogs.com/CLTANG/p/4332609.html

你可能感兴趣的文章
回归模型与房价预测
查看>>
stream
查看>>
将一个句子中的单词逆转问题
查看>>
2015年笔记总结——技术篇
查看>>
Oracle 取两个表中数据的交集并集差异集合
查看>>
scikit-learn预处理实例之一:使用FunctionTransformer选择列
查看>>
zabbix 安装配置以及漏洞检测脚本
查看>>
【转】CentOS 6 服务器安全配置指南
查看>>
以文本方式实现Word文档报表的解决方案(三)
查看>>
【距离GDOI:137天】 扩展KMP...字符串QAQ
查看>>
P3956 棋盘
查看>>
P1278 单词游戏
查看>>
Web前端:11个让你代码整洁的原则
查看>>
eval() hasattr() getattr() setattr() 函数使用方法
查看>>
【我的Android进阶之旅】Android 如何防止 so库文件被未知应用盗用?
查看>>
linux快速清空文件 比如log日志
查看>>
goroutine
查看>>
openwrt 串口无法登陆
查看>>
在SOUI中使用布局模板
查看>>
HDFS详解(3)——HDFS文件结构
查看>>