本文主要介绍puppet的三种认证方式:自动注册、手动注册和预签名注册;master和agent的认证关系,是随着认证的复杂程度提升,安全性也会随之提高,下面就是每一种方式的示例解读。

一 手动注册

手动注册是由Agent端先发起证书申请请求,然后由Puppetserver端确认证书方可注册成功,这种注册方式安全系数中等,逐一注册(puppet cert --sign certnmame)在节点数量较大的情况下是比较麻烦的,效率也低,批量注册(puppet cert --sign --all)效率很高,一次性便可注册所有的Agent的请求,但是这种方式安全系数较低,因为错误的请求也会被注册上。

1、节点申请认证

[root@agent1 ~]# puppet agent --test

info: Creating a new SSL key for agent1_cert.puppet.com
info: Caching certificate for ca
info: Creating a new SSL certificate request for agent1_cert.puppet.com
info: Certificate Request fingerprint (md5): 69:D2:86:25:7F:00:RT:55:61:P9:02:34:9E:9B:AF:F9
Exiting; no certificate found and waitforcert is disabled

2、服务器端确定认证

[root@master ~]# puppet cert --list --all                                         #查看认证情况

"agent1_cert.puppet.com"  (69:D2:86:E4:7F:00:E0:55:61:19:02:34:9E:9B:AF:F9) #未认证
+ "master.puppet.com" (C0:E3:6B:76:36:EC:92:93:4D:BF:F0:8F:77:00:91:C8)

[root@master ~]# puppet cert --sign agent1_cert.puppet.com     #注册agent1

notice: Signed certificate request for agent1_cert.puppet.com #将请求的证书正式注册
notice: Removing file Puppet::SSL::CertificateRequest agent1_cert.puppet.com at '/var/lib/puppet/ssl/ca/requests/agent1_cert.puppet.com.pem' #删除请求

[root@master ~]# puppet cert --list --all                                 #再次查看认证情况

+ "agent1_cert.puppet.com"  (3E:46:4E:75:34:9A:5A:62:A6:3C:AE:BD:49:EE:C0:F5)
+ "master.puppet.com" (C0:E3:6B:76:36:EC:92:93:4D:BF:F0:8F:77:00:91:C8)

[root@master ~]# tree /var/lib/puppet/ssl/                         #另外一种查看认证的方式
/var/lib/puppet/ssl/
├── ca
│   ├── ca_crl.pem
│   ├── ca_crt.pem
│   ├── ca_key.pem
│   ├── ca_pub.pem
│   ├── inventory.txt
│   ├── private
│   │   └── ca.pass
│   ├── requests
│   ├── serial
│   └── signed
│       ├── agent1_cert.puppet.com.pem  #已经注册成功
│       └── master.puppet.com.pem
├── certificate_requests
├── certs
│   ├── ca.pem
│   └── master.puppet.com.pem
├── crl.pem
├── private
├── private_keys
│   └── master.puppet.com.pem
└── public_keys
   └── master.puppet.com.pem

3、test模块测试

[root@agent1 ~]# puppet agent --test  #测试节点agent1
info: Caching catalog for agent1_cert.puppet.com
info: Applying configuration version '1385309582'
notice: /Stage[main]/test/File[/etc/test]/content: 
--- /etc/test    2016-12-13 07:18:52.000000000 +0800
+++ /tmp/puppet-file20161213-4571-1vqc18j-0    2016-12-13 02:51:47.000000000 +0800
@@ -0,0 +1,3 @@
+--                       --
+--------puppet test---------
+--                       --
info: FileBucket adding {md5}d41d8cd98f00b204e9800998ecf8427e
info: /Stage[main]/test/File[/etc/test]: Filebucketed /etc/test to puppet with sum d41d8cd98f00b204e9800998ecf8427e
notice: /Stage[main]/test/File[/etc/test]/content: content changed '{md5}d41d8cd98f00b204e9800998ecf8427e' to '{md5}87ea3a1af8650395038472457cc7f2b1'
notice: Finished catalog run in 0.40 seconds

二 自动注册


这种注册方式简单来讲是通过master端的ACL列表进行控制的,安全系统较低,也就是说符合预先定义的ACL列表中的所有节点请求不需要确认都会被自动注册上,也就是说你只需要知道ACL列表要求,其次能和Master端通信便可轻易注册成功。当然,它的最大优点就是效率非常高。

1、清除Master端已经注册的agent1的证书

[root@master ~]# puppet cert --clean agent1_cert.puppet.com

notice: Revoked certificate with serial 3
notice: Removing file Puppet::SSL::Certificate agent1_cert.puppet.com at '/var/lib/puppet/ssl/ca/signed/agent1_cert.puppet.com.pem'
notice: Removing file Puppet::SSL::Certificate agent1_cert.puppet.com at '/var/lib/puppet/ssl/certs/agent1_cert.puppet.com.pem'

[root@master ~]# puppet cert --list  --all             #agent1证书已经删除
+ "agent2_cert.puppet.com"      
+ "agent3_cert.puppet.com"       
+ "master.puppet.com"      
+ "master_cert.puppet.com" )

2、在agent1端删除注册过的证书

[root@agent1 ~]# rm -rf /var/lib/puppet/ssl/*

3、在master端编写ACL列表

[root@master ~]# vim /etc/puppet/autosign.conf    
*.puppet.com
[root@master ~]# /etc/init.d/master restart
Stopping master:                                     [  OK  ]
Starting master:                                     [  OK  ]
[root@master ~]# puppet cert --list  --all

4、自动注册

[root@agent1 ~]# puppet agent --test #申请证书
info: Creating a new SSL key for agent1_cert.puppet.com
info: Caching certificate for ca
info: Creating a new SSL certificate request for agent1_cert.puppet.com
info: Certificate Request fingerprint (md5): ED:C9:C7:DF:F1:0E:53:1C:D3:73:5D:B7:D3:94:1F:60
info: Caching certificate for agent1_cert.puppet.com
info: Caching certificate_revocation_list for ca
info: Caching catalog for agent1_cert.puppet.com
info: Applying configuration version '1394359075'
notice: Finished catalog run in 1.39 seconds
[root@agent1 ~]# cat /etc/test
--                       --
--------puppet test---------
--                       --

5、服务器端查看

[root@master ~]# puppet cert --list  --all      #查看agent已经自动注册成功

+ "agent1_cert.puppet.com"       
+ "agent2_cert.puppet.com"      
+ "agent3_cert.puppet.com"      
+ "master.puppet.com"     
+ "master_cert.puppet.com" 

三 预签名认证

预签名注册是在agent端未提出申请的情况下,预先在master端生成agent端的证书,然后复制到节点对应的目录下即可注册成功,这种方式安全系数最高,但是操作麻烦,需要提前预知所有节点服务器的certname名称,其次需要将生成的证书逐步copy到所有节点上去。不过,如果你的系统中安装了kickstart或者cobbler这样的自动化工具,倒是可以将证书部分转换成脚本集成到统一自动化部署中 注:生产环境中建议此方式进行注册,既安全又可靠!

1、清除master端已经注册的agent1的证书

[root@master ~]# puppet cert --clean agent1_cert.puppet.com
notice: Revoked certificate with serial 3
notice: Removing file Puppet::SSL::Certificate agent1_cert.puppet.com at '/var/lib/puppet/ssl/ca/signed/agent1_cert.puppet.com.pem'
notice: Removing file Puppet::SSL::Certificate agent1_cert.puppet.com at '/var/lib/puppet/ssl/certs/agent1_cert.puppet.com.pem'

2、在agent1端删除注册的所有信息,包括证书

[root@agent1 ~]# rm -rf /var/lib/puppet/*

3、删除自动注册ACL列表

[root@master ~]# mv /etc/puppet/autosign.conf{,.bak}

4、puppetserver端预先生成agent1证书

[root@master ~]# puppetca --generate agent1_cert.puppet.com
notice: agent1_cert.puppet.com has a waiting certificate request
notice: Signed certificate request for agent1_cert.puppet.com
notice: Removing file Puppet::SSL::CertificateRequest agent1_cert.puppet.com at '/var/lib/puppet/ssl/ca/requests/agent1_cert.puppet.com.pem'
notice: Removing file Puppet::SSL::CertificateRequest agent1_cert.puppet.com at '/var/lib/puppet/ssl/certificate_requests/agent1_cert.puppet.com.pem'

5、节点生成目录结构

[root@agent1 ~]# puppet agent --test --server=abc.com     #随便指定server端,生成目录结构
info: Creating a new SSL key for agent1_cert.puppet.com
err: Could not request certificate: getaddrinfo: Temporary failure in name resolution
Exiting; failed to retrieve certificate and waitforcert is disabled

[root@agent1 ~]# tree /var/lib/puppet/ssl/
/var/lib/puppet/ssl/
|-- certificate_requests
|-- certs
|-- private
|-- private_keys
|   `-- agent1_cert.puppet.com.pem
`-- public_keys
   `-- agent1_cert.puppet.com.pem

6、master端copy证书到agent1上

[root@master ~]# scp /var/lib/puppet/ssl/private_keys/agent1_cert.puppet.com.pem  agent1.puppet.com:/var/lib/puppet/ssl/private_keys/ 
agent1_cert.puppet.com.pem                                                         100% 3243     3.2KB/s   00:00    
[root@master ~]# scp /var/lib/puppet/ssl/certs/agent1_cert.puppet.com.pem  agent1.puppet.com:/var/lib/puppet/ssl/certs/
agent1_cert.puppet.com.pem                                                         100% 1944     1.9KB/s   00:00    
[root@master ~]# scp /var/lib/puppet/ssl/certs/ca.pem  agent1.puppet.com:/var/lib/puppet/ssl/certs/
ca.pem                                                                                 100% 1915     1.9KB/s   00:00

7、agent1测试

[root@agent1 ~]# >/etc/test 
[root@agent1 ~]# puppet agent --test
info: Caching certificate_revocation_list for ca
info: Caching catalog for agent1_cert.puppet.com
info: Applying configuration version '1394359075'
notice: /Stage[main]/test/File[/etc/test]/content: 
--- /etc/test    2016-12-13 18:10:10.000000000 +0800
+++ /tmp/puppet-file20161213-4071-1gypudk-0    2016-12-13 18:10:17.000000000 +0800
@@ -0,0 +1,3 @@
+--                       --
+--------puppet test---------
+--                       --
info: FileBucket adding {md5}d41d8cd98f00b204e9800998ecf8427e
info: /Stage[main]/test/File[/etc/test]: Filebucketed /etc/test to puppet with sum d41d8cd98f00b204e9800998ecf8427e
notice: /Stage[main]/test/File[/etc/test]/content: content changed '{md5}d41d8cd98f00b204e9800998ecf8427e' to '{md5}87ea3a1af8650395038472457cc7f2b1'
info: Creating state file /var/lib/puppet/state/state.yaml
notice: Finished catalog run in 0.41 seconds
[root@agent1 ~]# cat /etc/test 
--                       --
--------puppet test---------
--                       --

四 常见错误情况及解决办法

1.  连接master的时候出现如下报错:

dnsdomainname: Unknown host

解决办法:检查机器主机名的设置,以及是否添加进hosts。

2.   连接master的时候出现如下报错:

err: Could not request certificate: getaddrinfo: Name or service not known

解决办法:服务器端没有配置hosts域名绑定,在hosts中添加。

3.  连接master的时候出现如下报错:

warning: peer certificate won't be verified in this SSL session

解决办法:服务端还没有返回签发证书,使用puppet cert --list查看

4.  连接master的时候出现如下报错:

err: Could not retrieve catalog from remote server: certificate verify failed

解决办法:客户端和服务器端时间不同步,用ntpdate命令同步时间

5. Error: Could not retrieve catalog from remote server: Error 400 on SERVER: Could not parse for environment production: Syntax error at ';'; expected '}' at /etc/puppet/manifests/site.pp:3 on node server-02
解决办法:修改site.pp ,脚本中出现语法错误

6. Error: /File[/var/lib/puppet/lib]: Could not evaluate: Could not retrieve information from environment production source(s) puppet://server-01/plugins

解决办法:分别在客户端和服务器修改puppet.conf文件,添加“pluginsync=false",并分别重启服务

7. 执行 puppet agent --test --server=server-01 提示:
Notice: Run of Puppet configuration client already in progress; skipping (/var/lib/puppet/state/agent_catalog_run.lock exists)
解决办法:出现此提示为 配置文件不正确,或者服务器端的.pp 文件的语法错误,请去修改.pp 文件

8. Error: Could not request certificate: SSL_connect returned=1 errno=0 state=SSLv3 read server certificate B: certificate verify failed: [self signed certificate in certificate chain for /CN=Puppet CA: server-01]
解决办法:删除客户端证书、删除puppetmaster上的客户端证书、客户端重新生成证书请求、puppetmaster重新签名
1)、rm /var/lib/puppet/ssl/ 证书
2)、puppet cert clean 客户端主机名
3)、puppet agent --test --server puppetmaster
4)、puppet cert --sign 客户端主机名

9.   certificate verify failed: [CRL is not yet valid for /CN=server.minunix.com]
解决方法:master和agent 把时间同步下就OK 了
ntpdate -u 210.72.145.44

10. Error: Host server01 failed: Error 403 on SERVER: Forbidden request: server01(172.16.8.250) access to /run/server01 [save] authenticated at :119
在puppet 服务端尝试推送数据来更新客户端的时候提示这样的问题;
解决办法:
# vim /etc/puppet/auth.conf
path /
auth any
allow *

本文转自super李导51CTO博客,原文链接:http://blog.51cto.com/superleedo/1900417 ,如需转载请自行联系原作者

puppet三种认证注册方式详解及常见报错分析相关推荐

  1. 电信设置的nat 虚拟服务器192.168.1.3 是什么,VMware WorkStation的三种网络连接方式详解...

    一. 首先贴出本人在网络上找到与VMware网络连接相关的知识 安装完虚拟机后,默认安装了两个虚拟网卡,VMnet1和VMnet8,其他的未安装(当然也可以手动安装其他的).其中VMnet1是host ...

  2. vmware虚拟机重装后本机没虚拟网卡解决方案及虚拟机的三种网络连接方式详解

    vmware虚拟机重装后本机没虚拟网卡解决方案: 卸载虚拟机时,就算删除了安装路径,在设备管理器中删除了网卡,在注册列表项中删除了vmware列表项,重装后一般还是会出现本机网络连接中没有没有虚拟机默 ...

  3. DDOS攻击器常见的三种DDoS攻击方式详解

    一流的攻击速度以及强大的隐蔽性能,使得DDOS集合了市面上所有攻击软件优点成为了最热的攻击方式.接下来本文将简单的介绍一下三种最为流行的DDOS攻击方式. SYN/ACK Flood攻击: 这种攻击方 ...

  4. java中三种基本循环方式详解

    #博学谷IT学习技术支持# Java循环for,while和do-while 简述:如果对于同一种操作需要执行多次的话,就要使用到循环结构.它可以大大简化代码的书写量,让我们的开发更便捷. 例如:打印 ...

  5. python不是内部或外部命令的解决方法_详解python常见报错--NO MODULE NAMED _SQLITE3解决方法...

    概述 在安装一些基于python的程序时,经常遇到"ImportError: No module named _sqlite3"问题. 下面记录下解决方法. 解决办法 1.编译sq ...

  6. 集丰照明|LED五种调光方式详解(DALI/DMX/0-10V/PWM/可控硅)

    LED五种调光方式详解 LED的发光原理同传统照明不同,同功率的 LED 光源,因其采用的芯片不同,电流电压参数则不同,故其内部布线结构和电路分布也不同,导致了各生产厂商的光源对调光驱动的要求也不尽相 ...

  7. (03)_k8s之flannel三种模型安装部署详解

    flannel三种模型安装部署详解 yht_1990关注[2020-10-04 12:13:47](javascript:

  8. 【虚幻引擎UE】UE5 三种模式调用API详解(案例基于免费Varest插件)

    [虚幻引擎UE]UE5 三种模式调用API详解(案例基于免费Varest插件) 想通过UE5 调用API实现GET和POST, 可以通过自己编写C++方法, 或基于相关HTTP请求插件, 如Vares ...

  9. java中的json_JAVA中的四种JSON解析方式详解

    JAVA中的四种JSON解析方式详解 我们在日常开发中少不了和JSON数据打交道,那么我们来看看JAVA中常用的JSON解析方式. 1.JSON官方 脱离框架使用 2.GSON 3.FastJSON ...

最新文章

  1. 关于云计算 你所知道的可能不是真的
  2. Open×××的新钩子设计
  3. ubuntu15.04配置php,Linux_Ubuntu 15.04上安装Justniffer的详细教程,Justniffer 是一个可用于替代 Snor - phpStudy...
  4. Oracle CheckPoint进程
  5. 剑指offer之先序非递归打印二叉树
  6. 别说我不会玩,我来告诉你iPhone有多烂!iPhone缺点集
  7. Linux下那些查找命令
  8. Splay伸展树入门(单点操作,区间维护)附例题模板
  9. Java大厂面试题:从 JVM 角度说进程和线程之间的关系
  10. BM3D代码matlab,BM3D的学习与Matlab实现
  11. springboot旅游公司网站毕业设计源码110929
  12. 2021-2027全球与中国CMF电池市场现状及未来发展趋势
  13. ES6之Symbol详解
  14. 2016杭州云栖大会回顾网址
  15. 2018年专业技术人员权益保护-测试题答案
  16. 图像修复神器!带上口罩都能还原!DDPM:用去噪扩散概率模型极限修复图像,效果太牛了!...
  17. A003-182-2268-黄清梅
  18. vscode中怎样格式化js代码_vsCode配置代码格式化
  19. python编程<十五>
  20. STM32 HAL库 CUBEMX FPU 和 DSP库

热门文章

  1. 养成精通英语的三十个好习惯
  2. 神经网络算法有哪些模型,神经网络的简单模型是
  3. 近期 0day exploit 满天飞,原来是神秘的以色列公司 Candiru 在捣鬼
  4. 赠书 | 《大型网站运维:从系统管理到SRE》
  5. golang原生库mime/multipart上传formdata文件的一个小坑unexpected EOF
  6. 计算机图形学算法【1】——直线画法(数值微分法)
  7. VERI-ZEXE: Decentralized Private Computation with Universal Setup
  8. 非法获取计算机 取证,电子数据取证应注意的几个问题
  9. 关于怎么绘制星级评价方法
  10. 云计算学习好学吗?云计算这个行业前景如何?