兩臺機器 192.168.1.122 (服務器) 192.168.1.124(客戶端)
兩臺機器關閉selinux,清空iptebles規則,並保存,設置hostname
122上HOSTNAME=web1.bbs.com vim /etc/sysconfig/network 定義hostname
124上HOSTNAMEweb2.bbs.com vim /etc/sysconfig/network 定義hostname
編輯hosts文件 122和124全爲
192.168.1.122 web1.bbs.com
192.168.1.124 web2.bbs.com
兩臺機器安裝ntpdate,並建立自動同步時間的任務計劃
yum install -y ntp
cront -e 加入
*/10 * * * * ntpdate ntpdate time.nist.gov > /dev/null 2>& 1
服務器端
安裝puppet源
rpm -ivh "http://yum.puppetlabs.com/el/6/products/x86_64/puppetlabs-release-6-7.noarch.rpm"
作用
ls /etc/yum.repos.d/
CentOS-Base.repo CentOS-Media.repo epel-testing.repo
CentOS-Debuginfo.repo CentOS-Vault.repo puppetlabs.repo
CentOS-fasttrack.repo epel.repo
安裝服務端程序
yum install -y puppet-server
啓動服務
service puppetmaster start
開機啓動
chkconfig puppetmaster on
客戶端
安裝puppet源
rpm -ivh "http://yum.puppetlabs.com/el/6/products/x86_64/puppetlabs-release-6-7.noarch.rpm"
安裝客戶程序
yum install -y puppet
修改配置文件
vim /etc/puppet/puppet.conf 在最後添加
server = web1.bbs.com
runinterval = 10 主動更新,每隔30秒
啓動服務
service puppet start
開機啓動
chkconfig puppet on
配置認證
服務器查看客戶端證書列表
puppet cert list --all 如果簽發的認證,會本行最前面帶一個+
客戶端上生成ssl證書
puppet agent --test --server web1.bbs.com
服務器端簽發指定客戶端證書
puppet cert --sign web2.bbs.com
服務器端可以刪除指定客戶端證書
puppet cert clean web2.bbs.com
刪除所有證書
puppet cert clean --all
刪除證書的時候有時候就不顯示客戶端l
刪除下面的目錄 重啓客戶端服務
rm -rf /var/lib/puppet/ssl/* 存放證書的目錄
/etc/init.d/puppet restart
[root@web1 ~]# puppet cert list --all
"web2.bbs.com" (SHA256) 87:EF:DA:AE:22:58:08:7C:8A:F0:71:AB:D2:AB:6D:33:AB:31:BF:21:6C:A0:A8:4F:F4:AB:52:47:0A:99:A4:86
[root@web1 ~]# puppet cert --sign web2.bbs.com
Notice: Signed certificate request for web2.bbs.com
Notice: Removing file Puppet::SSL::CertificateRequest web2.bbs.com at '/var/lib/puppet/ssl/ca/requests/web2.bbs.com.pem'
配置自動簽發證書
vim /etc/puppet/puppet.conf
main末尾
加上 # Where SSL certificates are kept.
# The default value is '$confdir/ssl'.
ssldir = $vardir/ssl
autosign = true 支持自動簽名
服務器端刪除客戶端證書 puppet cert clean web2.bbs.com
客戶端刪除ssl相關文件 rm -rf /var/lib/puppet/ssl*
服務器創建自動簽發的配置文件 vim /etc/puppet/autosign.conf 加入一下內容
*.bbs.com
服務器重啓puppetmasert服務 /etc/init.d/puppetmaster restart
客戶端重啓puppet服務 /etc/init.d/puppet restart
服務端
puppet cert list --all 可以看到web2.bbs.com已經簽名
如果客戶端不重啓puppet服務,也可以通過命令來自動簽發
puppet agent --test --server web1.bbs.com
測試證書
服務器上編輯配置文件
vim /etc/puppet/mainfests/site.pp 添加如下內容 主配置文件
node default {
file {"/tmp/123.txt";
content => "test.test";
}}
說明:該配置文件後面還會講到,如果不配置該文件,則客戶端不會同步任何數據
客戶端上稍等一會 每隔10s會自動執行服務端上的任務
tcpdump -nn host 192.168.1.122 抓包
puppet agent --test --server web1.bbs.com
這樣在客戶端的/tmp/下會有個123.txt文件,內容爲test,test
這樣認證就成功了
puppet cert clean web2.bbs.com
清空掉 就不管用了
定義模塊管理
模塊是puppet的配置單元,模塊裏面會包含類和資源,同步文件,遠程執行命令,cron等叫做資源,都是通過模塊來實現的,下面來寫一個模塊
服務器端創建目錄 mkdir /etc/puppet/modules/testm 這個目錄名字也作爲模塊名字,然後繼續創建模塊對應的子目錄mkdir /etc/puppet/modules/testm/{files,manifests,templates} file裏面存文件,可以留空,mamifests裏面是配置文件,templates裏面是模塊文件可以爲空
創建配置文件 vim /etc/puppet/modules/testm/manifests/init.pp 初始入口的配置文件很關鍵
class testm{
file {"tmp/2.txt":
owner => "root",
group => "root",
mode => 0400,
source => "puppet://$puppetserver/modules/testm/1.txt"
}}
說明:類名字也叫作testm,類下面定義了一個資源file,文件名字叫做/tmp/2.5s5,owner,group,mode定義文件的屬主,屬組以及權限,source定義這個文件從哪裏獲取,$puppetserver一會也要定義一下,這裏指的是puppetserver服務器上/etc/puppet/modules/testm/files/1.txt
下面要繼續定義一個很關鍵的配置文件
vim /etc/puppet/manifests/site.pp
$puppetserver='web1.bbs.com'
node 'web2.bbs.com'{
include testm
}
說明:$puppetserver定義服務端的主機名,node後面爲客戶端的主機名,這裏面定義該客戶端要加載的模塊
配置完成後,在客戶端執行命令:
puppet agent --test --server=web1.bbs.com 如果客戶端上啓動了puppet服務,不用執行這命令,他也會自動同步的
文件或目錄資源
上面的模塊其實只是同步了一個文件而已,那麼要怎麼同步一個目錄?可以通過實現同步一個目錄來做一個包發佈系統 比如在一臺機器上便已安裝好了Apache,那麼就可以通過這樣的模塊把這個Apache目錄整個發佈到其他機器上
服務器配置
模塊配置如下
cless apache{
file {"/usr/local/apache2":對方機器上的目錄
owner => "root",
group => "root",
source => "puppet://$puppetserver/modules/testm/apache2",從服務的目錄下載
recurse => true
purge => true
}
}
其中recurse=>這個參數很關鍵,表示遞歸的意思,沒有這個不能同步目錄 purge參數可以保證當服務端刪除某個文件,客戶端可以跟着刪除
遠程執行命令
exec {"123":
unless => "test -f /tmp/55.txt",
path => ["/bin", "/sbin", "/usr/bin", "/usr/sbin"],
command => "touch /tmp/55.txt
}
說明:123只是作爲該資源的一個名字,unless後面的命令作爲條件,當條件成立時不會執行下面的命令,如果想要條件成立時,執行下面的命令,用onlyif,要注意的是,一定要給執行的這條命令加個條件,使用unless就可以,必須滿足這個條件才能執行命令,否則這個命令會一直執行,不太妥當
任務計劃
cron{"222":
command => "/sbin/ntpdate time.windows.com",
user => "root"
minute => "*/10",
minute => ”10-15“,
#ensure => "absent"
}
說明:分時日月周分別爲對應puppet裏面的minute,hour,monthday,month,weekday,ensure設置爲absent爲刪除該任務,如果不設置改行則爲建立