天天看點

shell腳本批量監控Linux server配置檔案的更改

    某些情況下,自己或同僚修改了某處系統設定,但由此所引發的問題可能一段時間以後才會暴露,由于記不清之前改過哪些檔案、改了哪些内容,解決問題時可能走彎路。于是寫了一個小腳本以特定頻率來監控常見系統配置檔案,如發生變化,則郵件通知管理者。

    這裡小發散一下,筆者習慣在内網單獨弄一台server,給予其免秘鑰登入所有伺服器額權限,以便批量管理server。并且統計好一個文本檔案,以”web1-x.x.x.x“每行一條記錄的形式将所有server主機名和IP資訊搜集于此。以備各種批量任務腳本引用。

    注:這台内網管理server權限巨大,是以即便在内網,其密碼複雜度、防火牆等安全措施也不容忽視。

下面是我目前監控的配置檔案,記錄于server_conf.txt檔案

1

2

3

4

5

6

7

8

9

10

11

12

<code>/var/spool/cron/root</code>

<code>/etc/fstab</code>

<code>/etc/sysconfig/network-scripts/ifcfg-em1</code>

<code>/etc/sysconfig/network-scripts/ifcfg-em2</code>

<code>/etc/sysconfig/network</code>

<code>/etc/hosts</code>

<code>/etc/resolv</code><code>.conf</code>

<code>/etc/sudoers</code>

<code>/etc/selinux/config</code>

<code>/etc/sysconfig/iptables</code>

<code>/etc/ssh/sshd_config</code>

<code>/root/</code><code>.</code><code>ssh</code><code>/authorized_keys</code>

下面看腳本内容

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

<code>#!/bin/sh</code>

<code>for</code> <code>ip_server </code><code>in</code> <code>$(</code><code>cat</code> <code>/shells/ips</code><code>.txt)  </code><code>#記錄區域網路的所有主機ip和主機名</code>

<code>  </code><code>do</code>

<code>  </code><code>(</code>

<code>  </code><code>ip=$(</code><code>echo</code> <code>$ip_server|</code><code>awk</code> <code>-F </code><code>'-'</code> <code>'{print $2}'</code><code>)   </code><code>#擷取各server IP</code>

<code> </code><code>#rsync -a -e  /shells/server_conf.txt $ip:/shells/    ###初次執行以及被監控的檔案清單有修改時才需同步</code>

<code>  </code><code>ssh</code> <code>$ip '</code>

<code>          </code><code>tmp_dir=</code><code>/var/log/check_conf</code><code>;    </code><code>###建立用于存放‘上一次的’配置檔案的目錄</code>

<code>          </code><code>if</code> <code>[ ! -d </code><code>"$tmp_dir"</code> <code>];</code>

<code>          </code><code>then</code>

<code>              </code><code>mkdir</code> <code>$tmp_dir;</code>

<code>          </code><code>fi</code><code>;</code>

<code>          </code><code>for</code> <code>conf_file </code><code>in</code> <code>$(</code><code>cat</code> <code>/shells/server_conf</code><code>.txt);     </code><code>###擷取各配置檔案絕對路徑</code>

<code>          </code><code>do</code>

<code>              </code><code>conf_name=</code><code>"${conf_file##*/}"</code>    <code>###擷取檔案名,不含目錄.這個寫法不太常用,某些</code><code>awk</code><code>無法使用的情況可以用它</code>

<code>              </code><code>###diff判斷内容是否改變,并調整輸出格式</code>

<code>              </code><code>diff</code> <code>$conf_file  $tmp_dir/$conf_name.last &gt; </code><code>/dev/null</code><code>;</code>

<code>              </code><code>if</code> <code>[ $? != 0 ];</code>

<code>              </code><code>then</code>

<code>                  </code><code>echo</code> <code>-e </code><code>"diff $conf_file  $conf_name.last\n-------------------------"</code><code>;</code>

<code>                  </code><code>diff</code> <code>$conf_file  $tmp_dir/$conf_name.last;</code>

<code>              </code><code>fi</code><code>;</code>

<code>              </code><code>###将現在的配置檔案同步到$tmp_dir以備下一次對比</code>

<code>              </code><code>rsync</code> <code>-a $conf_file $tmp_dir/$conf_name.last &gt; </code><code>/dev/null</code><code>;</code>

<code>          </code><code>done</code><code>;' &amp;&gt; </code><code>/tmp/</code><code>$ip.tmp</code>

<code>  </code><code>if</code> <code>[ $(</code><code>cat</code> <code>/tmp/</code><code>$ip.tmp|</code><code>wc</code> <code>-l) -gt 1 ];</code><code>then</code>

<code>    </code><code>mailx -s </code><code>"$ip_server conf_file modified"</code> <code>[email protected] &lt; </code><code>/tmp/</code><code>$ip.tmp</code>

<code>  </code><code>fi</code>

<code>  </code><code>)&amp;    </code><code>###以子shell形式達到for循環并行的效果</code>

<code>done</code>

<code>wait</code>

效果截圖

<a href="http://s3.51cto.com/wyfs02/M00/74/97/wKiom1YiaRyAOxMSAACth92v3Vo838.jpg" target="_blank"></a>

<a href="http://s3.51cto.com/wyfs02/M00/74/97/wKiom1Yia6LQf8YfAACVk0G5C6o412.jpg" target="_blank"></a>

     本文轉自kai404 51CTO部落格,原文連結:http://blog.51cto.com/kaifly/1703701,如需轉載請自行聯系原作者

繼續閱讀