puppet是一種Linux、Unix、windows平臺的集中配置管理系統,使用自有的puppet描述語言,可管理配置文件、用戶、cron任務、軟件包、系統服務等。puppet把這些系統實體稱之爲資源,puppet的設計目標是簡化對這些資源的管理以及妥善處理資源間的依賴關係。node
puppet採用C/S星狀的結構,全部的客戶端和一個或幾個服務器交互。每一個客戶端週期的(默認半個小時)向服務器發送請求,得到其最新的配置信息,保證和該配置信息同步。每一個puppet客戶端每半小時(能夠設置)鏈接一次服務器端, 下載最新的配置文件,而且嚴格按照配置文件來配置客戶端. 配置完成之後,puppet客戶端能夠反饋給服務器端一個消息. 若是出錯,也會給服務器端反饋一個消息.vim
具體的工做流程:
windows
Puppet工做中如下兩點值得注意:安全
本實驗使用四臺服務器模擬搭建puppet環境,具體拓撲圖以下:
各服務器IP分佈以下表服務器
主機 | IP地址 |
---|---|
puppetmaster | 192.168.58.146 |
puppetclient1 | 192.168.58.148 |
puppetclient2 | 192.168.58.149 |
ntp server | 192.168.58.147 |
[root@master ~]# cat /etc/hostname #修改主機名 master.test.cn [root@master ~]# cat /etc/hosts #將三臺服務器主機名和IP地址寫到/etc/hosts文件中去 192.168.58.146 master.test.cn 192.168.58.148 client1.test.cn 192.168.58.149 client2.test.cn [root@master ~]# ping client1.test.cn PING client1.test.cn (192.168.58.148) 56(84) bytes of data. 64 bytes from client1.test.cn (192.168.58.148): icmp_seq=1 ttl=64 time=0.846 ms 64 bytes from client1.test.cn (192.168.58.148): icmp_seq=2 ttl=64 time=0.477 ms 64 bytes from client1.test.cn (192.168.58.148): icmp_seq=3 ttl=64 time=0.438 ms [root@master ~]# systemctl stop firewalld [root@master ~]# setenforce 0
[root@promote ~]# yum install ntp -y [root@promote ~]# systemctl start ntpd [root@promote ~]# systemctl enable ntpd [root@promote ~]# systemctl stop firewalld [root@promote ~]# setenforce 0 [root@promote ~]# ntpstat synchronised to NTP server (85.199.214.100) at stratum 2 time correct to within 191 ms polling server every 64 s
[root@master ~]# yum install ntpdate -y #安裝NTP客戶端 [root@master ~]# ntpdate 192.168.58.147 5 Aug 16:54:55 ntpdate[2361]: adjust time server 192.168.58.147 offset -0.022671 sec #與NTP服務器進行時間同步
[root@master ~]# yum install epel-release -y #安裝epel第三方源 [root@master ~]# yum install puppet-server -y #安裝Puooet服務端 [root@master ~]# systemctl start puppetmaster.service #啓動puppetmaster服務
兩臺puppetclient服務器配置相似,只有主機名注意區分運維
[root@client1 ~]# cat /etc/hostname client1.test.cn [root@client1 ~]# cat /etc/hosts 192.168.58.146 master.test.cn 192.168.58.148 client1.test.cn 192.168.58.149 client2.test.cn [root@client1 ~]# ping master.test.cn PING master.test.cn (192.168.58.146) 56(84) bytes of data. 64 bytes from master.test.cn (192.168.58.146): icmp_seq=1 ttl=64 time=0.665 ms 64 bytes from master.test.cn (192.168.58.146): icmp_seq=2 ttl=64 time=0.504 ms ^C64 bytes from master.test.cn (192.168.58.146): icmp_seq=3 ttl=64 time=0.163 ms #能夠經過域名ping通pupetmaster服務器
[root@client1 ~]# yum install ntpdate -y [root@client1 ~]# ntpdate 192.168.58.147 5 Aug 17:00:29 ntpdate[2249]: adjust time server 192.168.58.147 offset -0.052137 sec #和NTP服務器進行同步
[root@client1 ~]# yum install epel-release -y #安裝epel第三方源 [root@client1 ~]# yum install puppet -y #安裝puppet客戶端
[root@client1 ~]# vim /etc/puppet/puppet.conf
申請和註冊
分別在client1和client2上進行註冊。ssh
[root@client1 ~]# puppet agent --server=master.test.cn --no-daemonize --verbose #這個就是註冊命令,執行完後會有下面的提示 Info: Creating a new SSL key for client1.test.cn Info: Caching certificate for ca Info: csr_attributes file loading from /etc/puppet/csr_attributes.yaml Info: Creating a new SSL certificate request for client1.test.cn Info: Certificate Request fingerprint (SHA256): 92:9E:71:34:3C:A8:90:5B:68:77:44:5A:3A:15:26:C9:29:86:F9:60:D2:2D:61:D4:1A:79:C2:2F:C9:CF:C5:01 Info: Caching certificate for ca #等待一下子後,能夠本身Ctrl+C結束,而後到server中查看申請信息。
咱們到master服務器中查看申請信息tcp
[root@master ~]# puppet cert --list "client1.test.cn" (SHA256) 92:9E:71:34:3C:A8:90:5B:68:77:44:5A:3A:15:26:C9:29:86:F9:60:D2:2D:61:D4:1A:79:C2:2F:C9:CF:C5:01 "client2.test.cn" (SHA256) 9D:7E:22:85:1D:79:08:31:00:BE:2F:35:C2:F2:71:B9:DC:22:0D:24:8C:58:8E:7D:DA:79:9A:94:D5:C6:22:9A #能夠看到兩臺客戶端提出了註冊申請
對未註冊的客戶端註冊ide
[root@master ~]# puppet cert sign --all Notice: Signed certificate request for client1.test.cn Notice: Removing file Puppet::SSL::CertificateRequest client1.test.cn at '/var/lib/puppet/ssl/ca/requests/client1.test.cn.pem' Notice: Signed certificate request for client2.test.cn Notice: Removing file Puppet::SSL::CertificateRequest client2.test.cn at '/var/lib/puppet/ssl/ca/requests/client2.test.cn.pem' #能夠看到已經經過了申請
能夠經過目錄去查看已經註冊的客戶端工具
[root@master puppet]# cd /var/lib/puppet/ssl/ca/signed/ [root@master signed]# ls client1.test.cn.pem client2.test.cn.pem master.test.cn.pem #能夠看到已經完成了證書的請求和簽名
這裏爲了保護Linux的ssh端口,修改客戶端client1的sshd端口,將端口22修改成9922,並實現重啓工做。
[root@master signed]# cd /etc/puppet/ [root@master puppet]# mkdir -p modules/ssh/{manifests,templates,files} [root@master puppet]# mkdir manifests/nodes [root@master puppet]# mkdir modules/ssh/files/ssh [root@master puppet]# chown -R puppet modules/ #修改屬主
此時/etc/puppet/modules/ssh目錄下的結構以下:
[root@master puppet]# ll modules/ssh/ 總用量 0 drwxr-xr-x. 3 puppet root 17 8月 5 17:25 files drwxr-xr-x. 2 puppet root 6 8月 5 17:25 manifests drwxr-xr-x. 2 puppet root 6 8月 5 17:25 templates
建立模塊配置文件install.pp
[root@master puppet]# vim /etc/puppet/modules/ssh/manifests/install.pp class ssh::install{ package{"openssh": ensure=>present, } } ~
建立模塊配置文件config.pp
[root@master puppet]# vim /etc/puppet/modules/ssh/manifests/config.pp
class ssh::config{
file {"/etc/ssh/sshd_config": #配置客戶端須要同步的文件
ensure=>present, #確認客戶端中有此文件
owner=>"root", #文件屬主
group=>"root", #文件屬組
mode=>"0600", #文件權限屬性
source=>"puppet://$puppetserver/modules/ssh/ssh/sshd_config",
#從服務端同步文件
require=>Class["ssh::install"], #調用install.pp確認ssh已經安裝
notify=>Class["ssh::service"], #若是config.pp發生變化,通知service.pp
}
}
~
建立模塊配置文件service.pp
[root@master puppet]# vim /etc/puppet/modules/ssh/manifests/service.pp
class ssh::service{
service { "sshd":
ensure=>running, #確認ssh運行
hasstatus=>true, #puppet該服務支持status命令,相似於service sshd status
hasrestart=>true, #puppet該服務支持restart,相似於service sshd restart
enable=>true, #服務器是否開機啓動
require=>Class["ssh::config"] #確認config.pp調用
}
}
建立模塊主配置文件init.pp
[root@master puppet]# vim /etc/puppet/modules/ssh/manifests/init.pp
class ssh {
include ssh::install,ssh::config,ssh::service
#將配置文件加載到ssh類中去
}
~
如今/etc/puppet/modeles/ssh/mainfests目錄下有四個文件:
[root@master puppet]# ll /etc/puppet/modules/ssh/manifests/
總用量 16
-rw-r--r--. 1 root root 337 8月 5 17:34 config.pp
-rw-r--r--. 1 root root 67 8月 5 17:43 init.pp
-rw-r--r--. 1 root root 72 8月 5 17:28 install.pp
-rw-r--r--. 1 root root 203 8月 5 17:40 service.pp
創建服務端ssh贊成維護文件,因爲服務端和客戶端的sshs_config文件默認同樣,此時將服務端的/etc/ssh/sshd_config複製到模塊默認路徑中去。
[root@master puppet]# cp /etc/ssh/sshd_config /etc/puppet/modules/ssh/files/ssh/
[root@master puppet]# chown -R puppet /etc/puppet/modules/ssh/files/ssh/
#修改文件夾屬主
建立測試節點配置文件,並將ssh加載進去。
[root@master puppet]# vim /etc/puppet/manifests/nodes/ssh.pp
node 'client1.test.cn'{
include ssh
}
~
將測試節點載入puppet,即修改site.pp
[root@master puppet]# vim /etc/puppet/manifests/site.pp
import "nodes/ssh.pp"
~
修改服務器維護的sshd_config配置文件
[root@master puppet]# vim /etc/puppet/modules/ssh/files/ssh/sshd_config
Port 9922 #修改成9922
重啓puppet
[root@master puppet]# systemctl restart puppetmaster.service
客戶端主動拉取,
[root@client1 ~]# puppet agent -t
...省略
Info: Applying configuration version '1533463512'
Notice: /Stage[main]/Ssh::Config/File[/etc/ssh/sshd_config]/content:
--- /etc/ssh/sshd_config 2017-08-07 10:28:25.000000000 +0800
+++ /tmp/puppet-file20180805-3493-173oey2 2018-08-05 18:05:13.550668088 +0800
@@ -14,7 +14,7 @@
#
-#Port 22
+Port 9922
#AddressFamily any
#ListenAddress 0.0.0.0
#ListenAddress ::
...省略
此時在client端已經執行成功,如今就去客戶端驗證一下:
[root@client1 ~]# netstat -ntap | grep 9922
tcp 0 0 0.0.0.0:9922 0.0.0.0: LISTEN 3695/sshd tcp6 0 0 :::9922 ::: LISTEN 3695/sshd