使用cfengine来实现服务器的自动化配置

本文涉及的产品
云解析 DNS,旗舰版 1个月
日志服务 SLS,月写入数据量 50GB 1个月
.cn 域名,1个 12个月
简介:
使用 cfengine 来实现服务器的自动化配置
 
目录
一、概述 
二、工作环境 
三、理论知识 
(一)cfengine的程序结构及配置文件 
(二)cfengine的工作方式 
四、配置过程 
(一)下载安装 
(二) 准备工作 
(三)工作方式二 
1.对服务器端进行配置 
2.对客户端进行配置 
3.设为开机启动 
4.排错: 
5.新加入一台客户机 
(四)工作方式一 
1.配置客户机上的cfservd.conf 
2.编辑服务器上的cfrun.hosts客户端列表 
3.在服务器上运行cfrun 
4.注意: 
五、小结
 
之前我写了一篇nagios监控软件的文章,得到大家的关注,能够将自己的知识分享给大家确实十分高兴。这篇文章是我最近使用的一个软件cfengine,如果说nagios主要是监控的监(监视)的话,那么cfengine则着重于控。很遗憾国内相关的文章很少,我就自己尝试写了这篇,希望得到大家的建议。

一、概述

cfengine是一个功能强大的自动化系统管理工具.引用其官网的说法cfengine是一种 UNIX 管理工具,其目的是使简单的管理的任务自动化,使困难的任务变得较容易。它的目标是使系统从任何状态收敛到一种理想状态。依照它的作者 Mark Burgess 所说,cfengine 总是使您的系统更接近于您所定义的配置; 它决不会使系统变得更糟。确实十分的拗口,也难以理解.简单的跟大家说说我的理解,很简单,就是你想你的系统应该是十分样子,你就可以使用cfengine来实现,它可以保证你的系统总是维持你所希望的那个状态.也就是说有黑客进来了修改了某个重要的配置文件的内容或者权限,也会被cfengine自动修复!!还有一种经常遇到的情况,有少则几台多则成千上万台机器,现在需要临时的改变其一个配置,例如删掉某个帐号,停掉某个服务,一般我们只能不厌其烦的登到每一台机器上重复的完成这些动作,但是有了cfengine,一个命令就可以搞定了.是不是很诱人?
cfengine大概的功能有:
检查和配置网络接口 
编辑系统和用户的文本文件 
维护符号链接 
检查和设置文件的权限 
删除垃圾文件 
检查重要文件和文件系统的存在 
控制用户脚本和shell命令的执行 
基于类的判定结构 
进程管理
为了节省篇幅,我这里就不一一介绍了,大家可以访问它的官方网站,里面的文档十分丰富
而且它还十分的人性化,给出了中文主页
 

二、工作环境

主机名
操作系统
ip 地址
centos1
centos 5
192.168.0.114
centos2
centos 5
192.168.0.115
centos3
centos 5
192.168.0.116
:centos5 redhat enterprise 5的重编译开源版本.功能使用与企业版几乎一样.
 

三、理论知识

(一)cfengine的程序结构及配置文件

Cfengine是一个用于设置和维护计算机系统的工具,包含了以下几个组件:
cfagent 自动配置代理(必须),其配置文件为cfupdate.conf cfagent.conf
cfservd 文件服务和远程激活服务(推荐),其配置文件为cfservd.conf
cfexecd 计划和报告服务(建议)
cfenvd 异常检测服务(强烈建议)
cfrun 远程激活cfagent的方法(需要的时候用这个),其配置文件为cfrun.hosts
cfshow 检查有帮助的数据库的内容的方法(辅助)
cfenvgraph  异常检测服务cfenvd的附属工具(辅助)
cfkey 密匙生成工具(每台主机运行一次).
在下一节分析cfengine的工作方式的时候会解释几个关键程序及其配置文件的作用

(二)cfengine的工作方式

cfengine有两种工作方式:
服务器激活方式:这是一种集中控制的方式,上图详细给出了整个流程.
1.服务器上运行cfrun,cfrun会根据cfrun.hosts中的主机列表来连接到某个客户机的cfservd程序
2.客户机上cfservd调用本机的cfagent程序
3.客户机上cfagent程序执行update.conf,连接到中央机的cfservd复制下载策略文件cafagent.conf
4.客户机下载成功后执行最新版本的策略文件,不成功就执行旧版本的.
:update.conf的内容一般为一些非常简单的固定操作:下载策略文件,清理日志,重启服务,基本上这个文件创建好了之后就不会更改了.在下载策略文件的时候如果下载成功,会将原策略文件改名,加上.cfsaved后缀
客户端自主激活方式:相比上一种要简单一些,客户机独立执行cfagent(可以是定期执行,例如加入cron).在这样的情况下,客户机就不需要有cfservd程序了,整个流程也简化为图中的第3,4.
 

四、配置过程

(一)下载安装

cfengine的文档里面都是采用源码安装的,经本人测试后发现源码安装经常会出现莫名奇妙的错误,而使用rpm包则是省时省力的方式.
cfengine需要opensslBerkely DB这两个依赖性的包,所以在正式安装cfengine,必须确认你的系统已经安装了db4, db4-devel,一般来说都是系统自带安装好的.然后就可以下载cfengine下载地址[url]http://dag.wieers.com/rpm/packages/cfengine/cfengine-2.2.2-1.el5.rf.i386.rpm[/url]
安装也很简单,rpm –ivh cfengine-2.2.2-1.el5.rf.i386.rpm即可,接下来我们就要着手配置了
 

(二) 准备工作

在服务器和客户端将cfengine安装完成后,要做下面一些准备工作:
为了完全使用源码方便控制,将服务都禁用掉.
[root@centos1 inputs]# chkconfig cfservd off
[root@centos1 inputs]# chkconfig cfenvd off
[root@centos1 inputs]# chkconfig cfexecd off
然后查看会看到所有cfengine的相关服务都禁用了
[root@centos1 inputs]# chkconfig --list|grep cf
 
cfengine的程序复制到bin目录下
mv /var/cfengine/bin/cfagent /var/cfengine/bin/cfagent.link(将原来的链接文件重命名)
cp  /usr/sbin/cfagent  /var/cfengine/bin
cp  /usr/sbin/cfenvd  /var/cfengine/bin
cp  /usr/sbin/cfexecd  /var/cfengine/bin
cp  /usr/sbin/cfservd  /var/cfengine/bin
 

(三)工作方式二

我这里先说工作方式二的原因是它的过程简单,而且很能体现cfengine的本质工作流程.
此时需要的条件是:
服务器运行cfservd (这里当然是需要有cfservd.conf配置文件).然后还有一个正确的策略文件cfagent.conf供客户机下载
客户机使用cfagent运行update.conf的配置,连接到服务器的cfservd进程,下载cfagent.conf来运行.
所以我们接下来要在服务器和客户端上创建所需的配置文件:
服务器上:cfservd.conf  cfagent.conf
客户端上:update.conf
我们这里将centos1作为服务器(192.168.0.114,为了简洁,文中会简称为114),centos2作为客户端,文中简称为115
 

1对服务器端进行配置

1)创建配置文件cfservd.conf
/var/cfengine/inputs下创建cfservd.conf
# cfservd.conf
# yahoon 2007.11.1
control:
    domain = ( yahoon.org )
    AllowConnectionsFrom = ( 192.168.0.0/24 )
    TrustKeysFrom = ( 192.168.0.0/24 )
    AllowUsers = ( root )
    MaxConnections = ( 150 )
    MultipleConnections = ( true )
    #AllowMultipleConnectionsFrom = ( 192.168.0 )
############################################
admit:
#/var/cfengine/rpc_out *.$(domain) 128.39.73
#/file *.$(domain) 128.39.73
    /masterfile/inputs    192.168.0.
    /var/cfengine         192.168.0.
然后我们就可以启动cfservd服务,执行
/var/cfengine/bin/cfservd  –v
同样带上-v参数来查看详细的输出,利于排错
…( 部分略 )…
Listening for connections ...
cfservd: cfservd starting Fri Nov  2 18:54:49 2007
显示是成功的,进一步查看fservd监听的tcp 5308端口
[root@centos1 inputs]# netstat -an|grep 5308
tcp        0      0 :::5308                     :::*                        LISTEN
 
2)创建策略文件cfagent.conf
这就是我们即将要发布给客户机运行的策略文件,路径同样是在/var/cfengine/inputs下创建,内容如下
control:
actionsequence = ( shellcommands )
shellcommands:
"/bin/echo Danger, Will Robison!"
 
3)测试
执行cfagent –v (如果不需要真正执行,可以加上-n参数)
…( 部分略 )..
cfengine:centos1:
Executing script /bin/echo Danger, Will Robison!...(timeout=0,uid=-1,gid=-1)
(Setting umask to 77)
cfengine:centos1:/bin/echo Dange: Danger, Will Robison!
cfengine:centos1: Finished script /bin/echo Danger, Will Robison!
Performance(Exec(/bin/echo Danger, Will Robison!)): time=0.0529 secs, av=0.0536 +/- 0.0231
---------------------------------------------------------------------
Alerts
---------------------------------------------------------------------
++++++++++++++++++++++++++++++++++++++++
Summary of objects involved
++++++++++++++++++++++++++++++++++++++++
    global
    update
    main
cfengine:centos1: Outcome of version (not specified): Promises still kept 0%, Promises repaired 100%, Promises not kept 0%
运行完全正常,那么就可以将其复制到要发布的目录里面/masterfile/inputs
 
4DNS解析
cfservd在做文件传输的时候需要对连接上来的客户机做DNS解析,所以必需要有域名,如果是内部网没有dns服务,就利用/etc/hosts,将客户端加入进来.这里我们选用的域名为yahoon.org,
编辑/etc/hosts文件
[root@centos1 inputs]# vi /etc/hosts
# Do not remove the following line, or various programs
# that require network functionality will fail.
127.0.0.1               centos1 localhost.localdomain localhost
::1             localhost6.localdomain6 localhost6
192.168.0.115   centos2.yahoon.org
粗体的部分即为加上的对客户机115的解析,要测试是否成功解析了centos2.yahoon.org十分简单,服务器上ping这个域名就可以了..
[root@centos1 inputs]# ping centos2.yahoon.org
PING  centos2.yahoon.org (192.168.0.115) 56(84) bytes of data.
64 bytes from centos2.yahoon.org (192.168.0.115): icmp_seq=1 ttl=64 time=3.74 ms
64 bytes from centos2.yahoon.org (192.168.0.115): icmp_seq=2 ttl=64 time=1.61 ms
 

2.对客户端进行配置

1)创建配置文件update.conf
/var/cfengine/inputs下创建 update.conf
# update.conf
# yahoon 2007.11.1
control:
    actionsequence = ( copy processes tidy )
    domain = ( yahoon.org )
    #policyhost = ( my_policy_host )
    policyhost = ( 192.168.0.114 )
    master_cfinput = ( /masterfile/inputs )
    workdir = ( /var/cfengine )
copy:
    $(master_cfinput) dest=$(workdir)/inputs
                      r=inf
                      mode=700
                      type=binary
                      server=$(policyhost)
                      trustkey=true
processes:
#    "cfservd" restart /var/cfengine/bin/cfservd
#    "cfenvd" restart "/var/cfengine/bin/cfenvd"
    "cfservd" signal=term restart /var/cfengine/bin/cfservd
    "cfenvd" signal=kill restart "/var/cfengine/bin/cfenvd -H"
tidy:
    $(workdir)/outputs pattern=* age=7
# End
 
2)测试运行
为了安全我们一般使用cfagent -v –n ,带上了-n参数的意思是只是测试,而不会真的执行.
…( 部分略 )…
Looking for an input file /var/cfengine/inputs/update.conf
Cfengine input file had no explicit version string
Finished with update.conf
---------------------------------------------------------------------
Looking for remote method collaborations
---------------------------------------------------------------------
Finished with RPC
Accepted domain name: yahoon.org
cfagent -n: Running in ``All talk and no action'' mode
LogDirectory = /var/cfengine
Loaded /var/cfengine/ppkeys/localhost.priv
Loaded /var/cfengine/ppkeys/localhost.pub
Checksum database is /var/cfengine/checksum_digests.db
Default binary server seems to be centos2
*********************************************************************
 Update Sched: copy pass 1 @ Fri Nov  2 00:58:17 2007
*********************************************************************
Checking copy from 192.168.0.114:/masterfile/inputs to /var/cfengine/inputs
Connect to 192.168.0.114 = 192.168.0.114 on port 5308
Loaded /var/cfengine/ppkeys/root-192.168.0.114.pub
...............................................................
cfengine:centos2: Strong authentication of server=192.168.0.114 connection confirmed
Need this: /var/cfengine/inputs/cfagent.conf wasn't at destination (copying)
Performance(Copy(192.168.0.114:/masterfile/inputs > /var/cfengine/inputs)): time=0.2393 secs, av=0.2927 +/- 0.1537
*********************************************************************
 Update Sched: processes pass 1 @ Fri Nov  2 00:58:17 2007
*********************************************************************
cfengine:centos2: Running process command /bin/ps auxw
Defining classes
DoSignals(cfservd)
Existing restart sequence found (/var/cfengine/bin/cfservd)
cfengine:centos2: Executing shell command: /var/cfengine/bin/cfservd
Defining classes
DoSignals(cfenvd)
Existing restart sequence found (/var/cfengine/bin/cfenvd -H)
cfengine:centos2: Executing shell command: /var/cfengine/bin/cfenvd -H
*********************************************************************
 Update Sched: tidy pass 1 @ Fri Nov  2 00:58:17 2007
*********************************************************************
…( 部分略 )…
说明整个的执行过程是没问题的.粗体部分是连接服务器复制文件的过程.
 
上面是测试 我们现在不带-n来执行cfagent –v
…( 部分略 )…
Accepted domain name: yahoon.org
LogDirectory = /var/cfengine
Loaded /var/cfengine/ppkeys/localhost.priv
Loaded /var/cfengine/ppkeys/localhost.pub
Checksum database is /var/cfengine/checksum_digests.db
Default binary server seems to be centos2
*********************************************************************
 Update Sched: copy pass 1 @ Fri Nov  2 01:03:31 2007
*********************************************************************
Checking copy from 192.168.0.114:/masterfile/inputs to /var/cfengine/inputs
Connect to 192.168.0.114 = 192.168.0.114 on port 5308
Loaded /var/cfengine/ppkeys/root-192.168.0.114.pub
...............................................................
cfengine:centos2: Strong authentication of server=192.168.0.114 connection confirmed
Performance(Copy(192.168.0.114:/masterfile/inputs > /var/cfengine/inputs)): time=0.2774 secs, av=0.2847 +/- 0.1080
Saving the setuid log in /var/cfengine/cfagent.centos2.log
…( 部分略 )…
*********************************************************************
 Main Tree Sched: shellcommands pass 1 @ Fri Nov  2 01:03:33 2007
*********************************************************************
cfengine:centos2:
Executing script /bin/echo Danger,Will Robison!...(timeout=0,uid=-1,gid=-1)
(Setting umask to 77)
cfengine:centos2:/bin/echo Dange: Danger,Will Robison!
cfengine:centos2: Finished script /bin/echo Danger, Will Robison!
Performance(Exec(/bin/echo Danger,Will Robison!)): time=0.0434 secs, av=0.0472 +/- 0.0217
---------------------------------------------------------------------
可以看到已经成功的下载了cfagent.conf文件,并成功运行了
查看这个目录ls /var/cfengine/inputs 确实已经有了cfagent.conf
 
如果我们立刻再执行一次cfagent –v ,会发现输出有这么一句
cfengine:centos2: Nothing promised for [shellcommand./bin/echo Danger, Will Robison!] (0/1 minutes elapsed)
这句话的意思是这个配置没超过1分钟就执行过,执行的频率太快,cfengine这次是不会执行的.
 
如果对服务器上的配置文件做了修改,例如
shellcommands:
"/bin/echo Danger, ======Will Robison!"  我只是在这个地方加了几个等号输出 .
然后在客户机上执行cfagent –v输出确实是多了===,不过细心的你会发现inputs目录下多了个文件
cfagent.conf.cfsaved
也就是说当cfagent成功下载了最新版本的配置文件后,会将原来的做个备份.
 

3.设为开机启动

最后我们需要做的就是将cfengine的程序设为自动启动.在客户机和服务器上
vi  /etc/rc.d/rc.local加上下面这两行
/var/cfengine/bin/cfservd
/var/cfengine/bin/cfenvd –H
然后让cfagent定期执行,也就是定期到服务器上去下载最新的配置文件来执行
运行crontab -e加上下面这句话
0,15,30,45 * * * * /var/cfengine/bin/cfexecd -F
 
 

4.排错:

1.原来我想的是本地子网没有域名,以为用ip就够了,就没有给出domain,在客户端运行cfagent –v输出如下
*********************************************************************
 Update Sched: copy pass 1 @ Thu Nov  1 21:52:20 2007
*********************************************************************
Checking copy from 192.168.0.114:/masterfiles/inputs to /var/cfengine/inputs
Connect to 192.168.0.114 = 192.168.0.114 on port 5308
cfengine:centos2: Undefined domain name
cfengine:centos2: Id-authentication for centos2.undefined.domain failed
cfengine:centos2: Unable to establish connection with 192.168.0.114 (failover)
Saving the setuid log in /var/cfengine/cfagent.centos2.log
可以看到连接是失败的.因为cfservd要求连接上来的机器必须有DNS记录.
 
2.如果设置了domain,但是在/etc/hosts中没有连接的客户机的记录的话(也就是说只是在配置文件里面定义了域,而实际查不到dns记录)那么会有下面的错误
*********************************************************************
 Update Sched: copy pass 1 @ Thu Nov  1 22:49:42 2007
*********************************************************************
Checking copy from 192.168.0.114:/masterfiles/inputs to /var/cfengine/inputs
Connect to 192.168.0.114 = 192.168.0.114 on port 5308
Loaded /var/cfengine/ppkeys/root-192.168.0.114.pub
...............................................................
cfengine:centos2: Strong authentication of server=192.168.0.114 connection confirmed
cfengine:centos2: Server returned error:  Host authentication failed. Did you forget the domain name or IP/DNS address registration (for ipv4 or ipv6)?
cfengine:centos2: Can't stat /masterfiles/inputs in copy
Saving the setuid log in /var/cfengine/cfagent.centos2.log
另外在cfservd.confupdate.conf,服务器上用于拷贝的目录路径必须正确,否则也会报这个错误的我这里是:/masterfiles/inputs.
 

5.新加入一台客户机

现在新加入一台客户端机器名centos3  ip地址 192.168.0.116
在它上面安装好cfengine,做好准备工作:禁用服务,拷贝程序
要让它能连上服务器的cfservd,那么必须在服务器上添加它的dns记录
在服务器上, vi /etc/hosts
# Do not remove the following line, or various programs
# that require network functionality will fail.
127.0.0.1               centos1 localhost.localdomain localhost
::1             localhost6.localdomain6 localhost6
192.168.0.115   centos2.yahoon.org
192.168.0.116   centos3.yahoon.org  加上粗体的这行 .
然后从centos2上拷贝update.conf到新客户端上,当然是使用sftp是最快的
先切换到inputs目录下
cd /var/cfengine/inputs
运行sftp(过程如下:粗体部分是输入的命令)
sftp 192.168.0.115
Connecting to 192.168.0.115...
The authenticity of host '192.168.0.115 (192.168.0.115)' can't be established.
RSA key fingerprint is 62:ef:31:0b:ee:89:74:f8:94:4d:ec:11:ee:fa:18:79.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added '192.168.0.115' (RSA) to the list of known hosts.
root@192.168.0.115's password:  输入115 的密码
sftp> cd /var/cfengine/inputs
sftp> dir
cfagent.conf             cfagent.conf.cfsaved     cfservd.conf             update.conf             
sftp> get update.conf
Fetching /var/cfengine/inputs/update.conf to update.conf
/var/cfengine/inputs/update.conf                      100%  774     0.8KB/s   00:00   
sftp> bye
现在就可以测试运行了
[root@centos3 inputs]# cfagent -v -n
输出报错
Checking copy from 192.168.0.114:/masterfile/inputs to /var/cfengine/inputs
Connect to 192.168.0.114 = 192.168.0.114 on port 5308
cfengine:centos3: BAD: keys did not match
cfengine:centos3: Authentication dialogue with 192.168.0.114 failed
cfengine:centos3: Unable to establish connection with 192.168.0.114 (failover)
看来是key的问题从服务器和客户端上删掉相关的公钥文件(/var/cfengine/ppkeys目录下)
服务器上删掉root-192.168.0.116.pub
客户端上删掉root-192.168.0.114.pub
 
重新执行cfagent –v –n
Checking copy from 192.168.0.114:/masterfile/inputs to /var/cfengine/inputs
Connect to 192.168.0.114 = 192.168.0.114 on port 5308
cfengine:centos3: Trusting server identity and willing to accept key from 192.168.0.114=192.168.0.114
Saving public key /var/cfengine/ppkeys/root-192.168.0.114.pub
cfengine:centos3: /var/cfengine/inputs/cfagent.conf wasn't at destination (copying)
cfengine:centos3: Copying from 192.168.0.114:/masterfile/inputs/cfagent.conf
cfengine:centos3: Object /var/cfengine/inputs/cfagent.conf had permission 600, changed it to 700
cfengine:centos3: Object /var/cfengine/inputs had permission 755, changed it to 700
Performance(Copy(192.168.0.114:/masterfile/inputs > /var/cfengine/inputs)): time=0.4462 secs, av=0.4462 +/- 0.0316
Saving the setuid log in /var/cfengine/cfagent.centos3.log
运行成功!
接下来的工作就又很简单了,加入启动项,加入crontab.
从加入第二台机器的排错过程,我们可以看到,cfservd建立连接的时候,有一个交换key的过程
一般在安装好了后在/var/ppkey的目录下已经有了localhost.privlocalhost.pub
上面所说的客户端115连到服务器114的过程就是:
115将自己的localhost.pub114,114将其改名为root-192.168.0.115.pub;同样:114将自己的localhost.pub115,115将其改名为root-192.168.0.114.pub
不信的话可以查看115上的localhost.pub114上的root-192.168.0.115.pub,内容是一样的.
小结:
要跟cfservd建立连接需要两个过程:首先是交换和验证公钥(如果是第一次连接没有对方的公钥就要交换,以后的连接就只需要验证就可以了),然后是服务器对客户机做DNS反向查询(文档里面说的是两次)
 

(四)工作方式一

在完成了对工作方式二的配置之后,在它的基础上我们来配置工作方式一,这种工作方式是由服务器运行cfrun连接远程客户端的cfservd,激活远程主机的cfagent程序.相比第二种方式而言,这种做法实现了集中控制.例如现在有个配置需要立刻更改,而现在还没到客户端定时运行的时间,如果我们一台台的登录到客户机来执行cfagent,显然是十分麻烦的,而且很费时间.有了cfrun就可以在中央机上对所有的客户发出指令让他们立即运行cfagent.

1.配置客户机上的cfservd.conf

在之前的update.conf里面,我们可以看到我们已经在远程客户端上开启了cfservd进程.只是并没有为它们写配置文件,要做也其实很简单,将服务器的cfservd.conf复制过来,然后做适当修改就可以了
# cfservd.conf
# yahoon 2007.11.1
control:
    cfrunCommand = ( "/var/cfengine/bin/cfagent" )   只需要加入这一句就可以了
    domain = ( yahoon.org )
    AllowConnectionsFrom = ( 192.168.0.0/24 )
    TrustKeysFrom = ( 192.168.0.0/24 )
    AllowUsers = ( root )
    MaxConnections = ( 150 )
    MultipleConnections = ( true )
    #AllowMultipleConnectionsFrom = ( 192.168.0 )
############################################
admit:
#/var/cfengine/rpc_out *.$(domain) 128.39.73
#/file *.$(domain) 128.39.73
    /masterfile/inputs    192.168.0.
    /var/cfengine         192.168.0.
然后重启客户机的cfservd进程
 

2.编辑服务器上的cfrun.hosts客户端列表

在服务器上写配置文件cfrun.host,只需要把客户机的ip加进去,这里我们先只把115加进去
# This is the host list for cfrun
192.168.0.115
 

3.在服务器上运行cfrun

现在就可以在服务器上运行cfrun –v
…( 部分略 )…
Loaded /var/cfengine/ppkeys/localhost.priv
Loaded /var/cfengine/ppkeys/localhost.pub
Looking for a source of entropy in /var/cfengine/randseed
cfrun(0):         .......... [ Hailing 192.168.0.115 ] ..........
Connecting to server 192.168.0.115 to port 0 with options 
Loaded /var/cfengine/ppkeys/root-192.168.0.115.pub
Connect to 192.168.0.115 = 192.168.0.115 on port 5308
Loaded /var/cfengine/ppkeys/root-192.168.0.115.pub
...............................................................
cfrun:yahoon.org: Strong authentication of server=192.168.0.115 connection confirmed
192.168.0.115 replies..
Connection with 192.168.0.115 completed
到客户机115上查看cfagent的日志文件cfengine.centos2.runlog
Sat Nov  3 07:06:37 2007:Lock removed normally :pid=24784:lock.cfagent_conf.centos2.copy._masterfile_inputs__var_cfengine_inp
uts_192_168_0_114_4831:
Sat Nov  3 07:06:39 2007:Lock removed normally :pid=24784:lock.cfagent_conf.centos2.processes.proc_cfservd__var_cfengine_bin_
cfservd_1704:
Sat Nov  3 07:06:39 2007:Lock removed normally :pid=24784:lock.cfagent_conf.centos2.processes.proc_cfenvd__var_cfengine_bin_c
fenvd__H_4223:
Sat Nov  3 07:06:39 2007:Lock removed normally :pid=24784:lock.cfagent_conf.centos2.tidy._var_cfengine_outputs_3686:
Sat Nov  3 07:06:39 2007:Lock removed normally :pid=24784:lock.cfagent_conf.centos2.shellcommand._bin_echo_Danger__Will_hello
_____Robison______2889:
Sat Nov  3 07:06:39 2007:Lock removed normally :pid=24784:no_active_lock:
按照115的方法将另外一台客户机116也配置好,并加入到cfrun.hosts文件里面,同样执行cfrun –v就可以看到两台主机都运行了.
 

4.注意:

1.cfrun是读取cfrun.hosts里面的主机列表,一个主机完成之后再连接下一台主机
2.如果现在有多台主机,我现在有紧急情况要运行其中一台的cfagent,例如115这台机,当然你可以ssh到这台主机上直接执行cfagent –v,但是有了cfrun,你只需要在服务器上执行cfrun 192.168.0.115 –v,注意输出的第一行显示Skipping host 192.168.0.116,很明显,它会跳过116来执行.
3.如果客户机的cfservd.conf从服务器拷贝过来后未增加cfrunCommand = ( "/var/cfengine/bin/cfagent" ),那么在服务器执行cfrun –v的时候会报错,同样以115为例,那么cfrun –v的输出会有:
Loaded /var/cfengine/ppkeys/root-192.168.0.115.pub
...............................................................
cfrun:yahoon.org: Strong authentication of server=192.168.0.115 connection confirmed
192.168.0.115 replies..
 Host authentication failed. Did you forget the domain name or IP/DNS address registration (for ipv4 or ipv6)?cfrun:yahoon.org: Couldn't recv
cfrun:yahoon.org: recv
Connection with 192.168.0.115 completed
 

五、小结

1.通过客户机本身的cfexecd  服务器的cfrun如果是同时执行cfagent会不会出现冲突?答案是不会,cfengine有很好的锁的机制来避免这种情况的发生.通常来说,客户机定时执行cfexecd来单独激活自己的cfagent和服务器执行cfrun集中激活客户机这两种方式在实际中都会使用,只是场合不同:
定时执行:作为客户机的一种例行的工作安排进行设置,属于日常任务.
集中执行:一般用于特殊情况,要临时激活某些或者所有的客户机执行cfagent,例如临时更改某个主机的配置等.
2.cfengine本身并没有客户机服务器的严格区分,每一台主机同时可以是服务器,也可以当作客户机.这与windows域的概念有些相似,只要客户端上安装了域管理工具,就可以进行域管理的工作.cfengine也是这种概念.当然,一般来讲方便于集中控制,我们会选定一台机作为服务器,例如本文的centos1,其余的机都用作客户机.
3.cfengine的日志系统:cfengine的日志是相当丰富的,例如在centos1,/var/cfengine目录里面cfengine.centos1.runlog,这是cfagent进程的运行日志, cfengine.localhost.runlog这是cfenvd进程的日志.特别注意的是outputs这个目录下面,有很多文件,每次cfexecd运行一次,就会写入一个文件,文件的内容就是cfagent执行的结果.outputs这个目录包括下面的文件都是由cfexecd程序所产生的.
4. inputs outputs目录,这两个目录十分容易搞混,上面已经说了outputs目录的作用,inputs相对而言就重要得多,它是cfengine默认的当前有效配置文件所在的目录.我们之前创建的*.conf之类的文件都是在这个目录下.
5.cfengine的所有程序都带有-v参数,用于详细的输出,这对我们排错调试带来了很大方便.而且对于cfagent程序,-n参数是十分有用的.对于一个刚刚建立的策略文件直接执行是十分危险的,-n参数是模拟执行,所以带上它来运行cfagent就给我们带来很大的安全性,特别是调试的时候.所以首先应该使用cfagent –n –v
6.cfengine的文档是十分丰富的,我这里也只是仅仅安装上去,告诉大家基本的使用方法,更详细的使用说明可以查阅其官方网站的文档。
 


本文转自yahoon 51CTO博客,原文链接:http://blog.51cto.com/yahoon/52409,如需转载请自行联系原作者
相关文章
|
12天前
|
存储 人工智能 自然语言处理
ChatMCP:基于 MCP 协议开发的 AI 聊天客户端,支持多语言和自动化安装 MCP 服务器
ChatMCP 是一款基于模型上下文协议(MCP)的 AI 聊天客户端,支持多语言和自动化安装。它能够与多种大型语言模型(LLM)如 OpenAI、Claude 和 OLLama 等进行交互,具备自动化安装 MCP 服务器、SSE 传输支持、自动选择服务器、聊天记录管理等功能。
84 15
ChatMCP:基于 MCP 协议开发的 AI 聊天客户端,支持多语言和自动化安装 MCP 服务器
|
3天前
|
存储 弹性计算 安全
阿里云服务器配置选择策略参考及后期使用注意事项
对于初次购买阿里云服务器的一些新手用户来说,在云服务器配置选择和后期使用过程中有一些不清楚的地方,小编分享几点阿里云服务器配置选择策略,以及后期使用注意事项,购买过程中注意好下面这些事项,能让我们选对选好阿里云服务器,购买之后,在使用过程中,注意下面这些事项,能够让我们更好、更安全的使用阿里云服务器。下面是小编分享的一份详尽的阿里云服务器配置与使用指南,以供参考和借鉴。
|
1月前
|
安全 Linux 应用服务中间件
从零开始启动、配置、保护你的云服务器并搭建一个简单的网站
本文详细介绍了如何准备原料、搭建基础环境、进行安全防护、建设网站、管理证书以及开启BBR优化网络性能。主要内容包括获取健康云服务器、配置SSH登录、创建非root用户、启用密钥认证、安装Nginx、申请TLS证书、配置HTTPS自动跳转及优化网络性能等步骤。通过本文,读者可以掌握从零开始搭建个人网站的全过程。
45 1
从零开始启动、配置、保护你的云服务器并搭建一个简单的网站
|
22天前
|
运维 Ubuntu 应用服务中间件
自动化运维之路:使用Ansible进行服务器管理
在现代IT基础设施中,自动化运维已成为提高效率和可靠性的关键。本文将引导您通过使用Ansible这一强大的自动化工具来简化日常的服务器管理任务。我们将一起探索如何配置Ansible、编写Playbook以及执行自动化任务,旨在为读者提供一条清晰的路径,从而步入自动化运维的世界。
|
20天前
|
运维 网络安全 Python
自动化运维:使用Ansible实现批量服务器配置
在快速迭代的IT环境中,高效、可靠的服务器管理变得至关重要。本文将介绍如何使用Ansible这一强大的自动化工具,来简化和加速批量服务器配置过程。我们将从基础开始,逐步深入到更复杂的应用场景,确保即使是新手也能跟上节奏。文章将不包含代码示例,而是通过清晰的步骤和逻辑结构,引导读者理解自动化运维的核心概念及其在实际操作中的应用。
|
21天前
|
运维 Ubuntu 网络协议
自动化运维:使用Ansible进行服务器配置管理
在现代IT架构中,自动化运维已成为提升效率、减少人为错误的关键。本文将介绍如何使用Ansible这一强大的自动化工具来简化和标准化服务器的配置管理过程。通过具体的代码示例和操作步骤,我们将展示如何快速部署应用、管理配置以及自动化日常任务,从而确保环境的一致性和可靠性。
|
22天前
|
开发框架 .NET PHP
网站应用项目如何选择阿里云服务器实例规格+内存+CPU+带宽+操作系统等配置
对于使用阿里云服务器的搭建网站的用户来说,面对众多可选的实例规格和配置选项,我们应该如何做出最佳选择,以最大化业务效益并控制成本,成为大家比较关注的问题,如果实例、内存、CPU、带宽等配置选择不合适,可能会影响到自己业务在云服务器上的计算性能及后期运营状况,本文将详细解析企业在搭建网站应用项目时选购阿里云服务器应考虑的一些因素,以供参考。
|
1天前
|
人工智能 JSON Linux
利用阿里云GPU加速服务器实现pdf转换为markdown格式
随着AI模型的发展,GPU需求日益增长,尤其是个人学习和研究。直接购置硬件成本高且更新快,建议选择阿里云等提供的GPU加速型服务器。
利用阿里云GPU加速服务器实现pdf转换为markdown格式
|
9天前
|
弹性计算 运维 安全
阿里云轻量应用服务器与ECS的区别及选择指南
轻量应用服务器和云服务器ECS(Elastic Compute Service)是两款颇受欢迎的产品。本文将对这两者进行详细的对比,帮助用户更好地理解它们之间的区别,并根据自身需求做出明智的选择。
|
10天前
|
SQL 弹性计算 安全
阿里云上云优选与飞天加速计划活动区别及购买云服务器后续必做功课参考
对于很多用户来说,购买云服务器通常都是通过阿里云当下的各种活动来购买,这就有必要了解这些活动的区别,同时由于活动内的云服务器购买之后还需要单独购买并挂载数据盘,还需要设置远程密码以及安全组等操作之后才能正常使用云服务器。本文就为大家介绍一下目前比较热门的上云优选与飞天加速计划两个活动的区别,以及通过活动来购买云服务器之后的一些必做功课,确保云服务器可以正常使用,以供参考。