当前位置: 首页 > news >正文

OpenStack 镜像制作之cloud-init

Contents [hide]
  • 背景
  • 密钥登录
    • 2.1 密钥登录的原理
      • 2.1.1 openstack的私钥
      • 2.1.2 密码注入 =
      • 2.1.3 实际遇到的情况
      • 2.1.4 解决办法

背景

前面我们制作了镜像,并且制作的镜像支持了硬盘的自定义。但是还不够,我们要镜像支持密码注入,支持密钥登录。并且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/bash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
sync:x:5:0:sync:/sbin:/bin/sync
shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
halt:x:7:0:halt:/sbin:/sbin/halt
mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
uucp:x:10:14:uucp:/var/spool/uucp:/sbin/nologin
operator:x:11:0:operator:/root:/sbin/nologin
games:x:12:100:games:/usr/games:/sbin/nologin
gopher:x:13:30:gopher:/var/gopher:/sbin/nologin
ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin
nobody:x:99:99:Nobody:/:/sbin/nologin
vcsa:x:69:69:virtual console memory owner:/dev:/sbin/nologin
saslauth:x:499:76:"Saslauthd user":/var/empty/saslauth:/sbin/nologin
postfix:x:89:89::/var/spool/postfix:/sbin/nologin
sshd: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在启动后做了锁定的工作,参阅cloud-init配置文件,可以看到配置文件中加上lock_passwd:False就可以了

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

相关文章:

  • Ubuntu开启ssh服务(14.04)
  • IntelliJ IDEA中JAVA连接MYSQL
  • Python 类之 “属性(property ) 详解
  • SMR磁盘学习12---drivemanaged SMR 磁盘总结
  • 打造自己的 DockerImage
  • 实用的60个CSS代码片段
  • Node项目之评分系统(二)- 数据库设计
  • [asp.net core]project.json(2)
  • Java 8中,Function,Consumer,Predicate,Supplier举例 ,以及CompletableFuture使用
  • dict 没有 key 的情况
  • linux装oracle客户端
  • 聊聊自己的职业规划这个件事
  • 阿里云ECS Centos7 系统安装图形化桌面
  • iOS scrollView 的相关使用
  • 经典Java面试题-内部类
  • 分享的文章《人生如棋》
  • 《Java8实战》-第四章读书笔记(引入流Stream)
  • 【划重点】MySQL技术内幕:InnoDB存储引擎
  • android高仿小视频、应用锁、3种存储库、QQ小红点动画、仿支付宝图表等源码...
  • create-react-app项目添加less配置
  • maya建模与骨骼动画快速实现人工鱼
  • Mysql数据库的条件查询语句
  • SOFAMosn配置模型
  • Spring思维导图,让Spring不再难懂(mvc篇)
  • Terraform入门 - 3. 变更基础设施
  • windows下如何用phpstorm同步测试服务器
  • 彻底搞懂浏览器Event-loop
  • 今年的LC3大会没了?
  • 开发基于以太坊智能合约的DApp
  • 马上搞懂 GeoJSON
  • 山寨一个 Promise
  • 通过获取异步加载JS文件进度实现一个canvas环形loading图
  • 微信支付JSAPI,实测!终极方案
  • ​ 无限可能性的探索:Amazon Lightsail轻量应用服务器引领数字化时代创新发展
  • ​软考-高级-系统架构设计师教程(清华第2版)【第1章-绪论-思维导图】​
  • ​无人机石油管道巡检方案新亮点:灵活准确又高效
  • #pragma 指令
  • #数学建模# 线性规划问题的Matlab求解
  • $.each()与$(selector).each()
  • $.type 怎么精确判断对象类型的 --(源码学习2)
  • (1)(1.13) SiK无线电高级配置(五)
  • (切换多语言)vantUI+vue-i18n进行国际化配置及新增没有的语言包
  • (四)模仿学习-完成后台管理页面查询
  • (推荐)叮当——中文语音对话机器人
  • (学习日记)2024.01.09
  • (原創) 博客園正式支援VHDL語法著色功能 (SOC) (VHDL)
  • (转)JVM内存分配 -Xms128m -Xmx512m -XX:PermSize=128m -XX:MaxPermSize=512m
  • .NET CF命令行调试器MDbg入门(四) Attaching to Processes
  • .net 前台table如何加一列下拉框_如何用Word编辑参考文献
  • .NET简谈设计模式之(单件模式)
  • .NET委托:一个关于C#的睡前故事
  • @SentinelResource详解
  • [ CTF ] WriteUp- 2022年第三届“网鼎杯”网络安全大赛(朱雀组)
  • [ 代码审计篇 ] 代码审计案例详解(一) SQL注入代码审计案例
  • [04] Android逐帧动画(一)