跳轉到內容

使用 Xymon 進行系統監控 / 其他文件 / HOWTO

來自華夏公益教科書

如何將維護記錄從一個 Xymon 克隆到另一個 Xymon?

[編輯 | 編輯原始碼]

前端 Web GUI 用於收集資訊,最終使用“disable”語法傳送 bb 命令。

找出主機的維護狀態

[編輯 | 編輯原始碼]
  • bb xymon-server-name "hobbitdboard color=blue fields=hostname,testname,disabletime,dismsg"

停用主機

[編輯 | 編輯原始碼]
  • bb xymon-server-name "disable hostname.testname $timeframe $REASON"

啟用主機

[編輯 | 編輯原始碼]
  • bb xymon-server-name "enable hostname.testname"

啟用所有處於維護模式的藍色記錄主機

[編輯 | 編輯原始碼]

為什麼?,當您需要將記錄從 hobbit 伺服器 A 填充到 B 時很有用。

BB=/usr/bin/bb
HBS=myhobbit.example.com
${BB} ${HBS}  "hobbitdboard color=purple fields=hostname,testname" |
while read L; do
      HOSTANDTEST=`echo $L | sed 's/|/./'`
      ${BB} ${HBS} "enable $HOSTANDTEST"
done

從 Xymon A 複製藍色記錄到 Xymon B

[編輯 | 編輯原始碼]
#! /bin/sh
# -----------------------------------------------------------------------------
#           S H E L L  S C R I P T   S P E C I F I C A T I O N
# -----------------------------------------------------------------------------
#
# NAME
#      bluesync.sh  - A shell script to replicate Primary Xymon Serverblue record
#                     to Secondary standby Xymon server.
#
# REVISION HISTORY
#      07/12/2009    Base on getblue.sh and putblue.sh by Ralph Mitchell <ralphmitchell (at) gmail.com>
#                    http://www.hswn.dk/hobbiton/2009/07/msg00214.html
#      10/19/2009    T.J. Yang merge two scripts into one for Xymon  High Availability setup.
#
# USAGE
#      This script is tested on Solaris 10 OS.
#      put this shell script in hobbitlaunch.cfg as section like following.
#
# [bluesync]
# #     DISABLED
#       ENABLE
#       ENVFILE /etc/opt/hobbitserver42/hobbitserver.cfg
#       CMD /opt/hobbitserver42/ext/bluesync/bluesync.sh
#       LOGFILE $BBSERVERLOGS/bluesync.sh.log
#       INTERVAL 5m
#
# DESCRIPTION
#     Xymon keep its blue(maintenance) in memory, not in a file. This script
#     is to copy the blue records from primary Xymon A server into Xymon B secondary one.
#     This script is for use when running Active-Active type of Xymon server
#     High Availability setup. Xymon B is same as Xymon A except
#     the alerting function is disabled. There is another script running on Xymon B to
#     detect the outage of Xymon A and enable Xymon B to become primary one.
#
# Algorithms:
# 1. Pull blue records from Xymon1 and dump them into Xymon2's ext/bluesync directory.
# 2. Process the lifetime fields' value
#     if lifetime is -1 and greater then zero
#       then run "bb hobbit2.test.com "disable hosname.test lifetime message"
#            to keep the blue record.
#     if  liftime =0
#       the run "bb hobbit2.test.com "enable  hostname.*d"  to enable this host blue record
#           since it is expired or was enabled on xymon1 server.
#

# RETURN CODE
#       SUCCESS (=0) - script completed successfully
#       ERROR   (=1) - error... bad things happened
#       WARNING (=2) - warning... something's not quite right, but it's
#                      not serious enough to prevent installation.
#
# set -x

# ---------------------------- CONSTANT DECLARATION ---------------------------
XYMONCFG="/etc/opt/hobbitserver42/hobbitserver.cfg"
BlueTxt="/opt/hobbitserver42/ext/bluesync/hobbit1.test.com.blue.txt"
HB1="hobbit1.test.com"
SED="/usr/bin/sed"
HB2="hobbit2.test.com"
NOW=`/opt/bin/gdate +%s`
EXPR="/usr/bin/expr"
RM="/usr/bin/rm"
SUCCESS=0
ERROR=1
WARNING=2
export SUCCESS ERROR WARNING
# inherit hobbit server variables in configuration file
. ${XYMONCFG}

# ---------------------------- VARIABLE DECLARATION ---------------------------
exit_code=${SUCCESS}

# ******************************** MAIN SCRIPT ********************************

# remove the old file first.
${RM} ${BlueTxt}
${exit_code} = $?

# Getting blue records into a text file.

if [ ${exit_code} -eq ${SUCCESS} ]; then
   $BB ${HB1} "hobbitdboard color=blue fields=hostname,testname,disabletime,dismsg" |
           ${SED} -e 's/\\/\\\\/g'  > ${BlueTxt}
${exit_code} = $?
fi

if [ ${exit_code} -eq ${SUCCESS} ]; then
    cat ${BlueTxt} | while read line
    do
      OFS="$IFS"
      IFS="|"
      set $line
      IFS="$OFS"
      if [ "$3" -eq "-1" ]; then
        # found "disable until OK"
        lifetime="-1"
      else
        lifetime=`$EXPR $3 - ${NOW}`
        if [ "$lifetime" -le "0" ]; then
          # this one expired, enable it
          $BB ${HB2} "enable $1.*"
        else
          lifetime="$lifetime"s
        fi
      fi
      msg=`echo "$4" | $SED -e 's/\\\n/\n/g'`
      $BB ${HB2} "disable $1.$2 $lifetime $msg"
    done
${exit_code} = $?
fi

exit ${exit_code}

如何讓 pca 與 xymon 協同工作?

[編輯 | 編輯原始碼]

pca 是一個 Perl 指令碼,可以報告和安裝來自 Sun 補丁資料庫的 Solaris OS 所有版本的缺失補丁。

有兩種方法可以將 pca 與 xymon 監控工具整合。

伺服器端補丁分析

[編輯 | 編輯原始碼]

在 Xymon 客戶端上執行“showrev -p”和“pkginfo -x”,並在 Xymon 伺服器上執行 pca.pl 來分析所有客戶端的缺失補丁。

客戶端補丁分析

[編輯 | 編輯原始碼]

在 xymon 客戶端執行 pca.pl 進行缺失補丁分析,並將缺失補丁列表傳送到 xymon 伺服器。

  • pca 軟體及其依賴軟體需要作為 xymon 客戶端軟體包的一部分部署。
  • 需要配置 pca.pl 查詢 xymon 伺服器上駐留的內部 Solaris 補丁資料庫。
  • 需要設定一個本地 pca 代理伺服器來儲存所有補丁壓縮檔案和主要的 Solaris 補丁資料庫。
  • 在獲得批准更新缺失補丁後,使用 pca 命令更新缺失補丁。

伺服器端和客戶端方法的優缺點

[編輯 | 編輯原始碼]
整合方法 伺服器端分析 客戶端分析
客戶端需要更改 修改 -sunos.sh 以傳送 "showrev -p" 和 "pkginfo -x" 輸出。 在 Xymon 客戶端上執行 "pca -L" 以及包裝指令碼中的更多 HTML 程式碼修正,或作為客戶端端擴充套件模組執行 "pca -M"(對 pca.pl 進行補丁更改)。
伺服器端需要更改 編寫一個伺服器端模組來處理從客戶端傳送的 "showrev -p" 資料。 Xymon 伺服器將建立一個包含從 Xymon 客戶端傳送的缺失補丁的 "pca" 列。
Xymon 伺服器上的負載 這將為 Xymon 伺服器上的所有客戶端新增缺失補丁計算時間。 Xymon 伺服器的負載最小,因為計算任務是在 Xymon 客戶端上完成的。
pca 指令碼更改 不需要更改 pca.pl 指令碼。我們只需要在 Xymon 伺服器上更新一次新的 pca.pl。 "pca -L" 不會生成與 Xymon 客戶端相容的 HTML 程式碼。我們需要在包裝指令碼中修正它,或者修補 pca perl 程式碼。
客戶端到伺服器的流量 "showrev -p" 的原始資料輸出將每 5 分鐘傳送一次! 訊息大小僅包含缺失補丁列表,而不是 "showrev -p" 的全部輸出,並且每 5 分鐘傳送一次。
管理成本 待定 待定

使用 Apache 和 CentOS 5 對 Active Directory 2003 進行透明身份驗證

[編輯 | 編輯原始碼]

在這裡,我(Stewart L)將解釋我在將 Linux 伺服器加入到 Active Directory 2003 基礎設施並對域進行使用者身份驗證(無需使用者輸入憑據)時所採取的步驟。

這針對的是 AD 2003 結構。如果你是在 200 或 NT 域中操作,這可能不適合你,但它應該能為你指明方向。

在這一點上,我將對示例做一些假設。

  • 你正在設定一個名為 web1.example.com 的 Web 伺服器。
  • 你的域名為 EXAMPLE,Kerberos 領域名為 EXAMPLE.COM
  • 你有一個名為 EXAMPLE\Bob 的域帳戶,它被授權將機器新增到域中。
  • 你的域控制器是 dc1.example.com。

安裝軟體包

[編輯 | 編輯原始碼]

你顯然需要安裝 Apache。你還需要 mod_auth_kerb 軟體包來對域進行身份驗證。如果你使用 authconfig-gtk 軟體包中的 system-config-authentication 工具,會容易得多。

yum -y install mod_auth_kerb authconfig-gtk

將機器加入域

[編輯 | 編輯原始碼]

在將機器加入域之前,必須處理一些事項...

  • 主機名(不含域)應不超過 15 個字元。
  • 系統時鐘應該同步。為此,請使用 NTP。
  • 你的 /etc/hosts 檔案需要正確設定。你應該有一個指向 127.0.0.1 的 localhost 條目,以及一個指向分配的 IP 地址的完全限定主機名條目。

處理完這些問題後,我們就可以開始配置身份驗證了。

  1. 以 root 使用者身份執行 system-config-authentication。
  2. 在身份驗證選項卡上,啟用 Kerberos 和 Winbind。
  3. 配置 Kerberos。
    1. REALM = EXAMPLE.COM
    2. 選中使用 DNS 將主機解析為領域並定位 KDC 的複選框。
    3. KDC 和管理伺服器可以留空。
    4. 單擊確定。
  4. 配置 Winbind
    1. Domain = EXAMPLE
    2. Security Model = ads
    3. ADS Realm = EXAMPLE.COM
    4. Domain Controllers = dc1.example.com
    5. 單擊確定
  5. 編輯你的 /etc/samba/smb.conf 檔案,並確保你的 netbios 名稱與你的主機名相同。這應該僅包含主機部分,不含域。

加入域

[編輯 | 編輯原始碼]

作為 root 使用者,執行以下命令。你將需要在兩個命令後都輸入 Bob 的密碼。

kinit EXAMPLE\Bob
net ads join -U EXAMPLE\Bob

這是域。預設情況下,你必須在該機器上有一個本地帳戶來對 AD 進行身份驗證,這意味著如果 web1.example.com 上沒有 bob 帳戶,bob 就無法使用他的域密碼登入。

配置 AD 使用者

[編輯 | 編輯原始碼]

這是事情變得有些複雜的地方。我們將在 AD 中建立一個使用者帳戶,Web 伺服器將使用該帳戶進行身份驗證。Windows Server 2000 和 2003 有許多不同的版本和 Service Pack。如果你在這一部分遇到問題,請檢視 http://grolmsnet.de/kerbtut/

  • 在 AD 中建立一個名為 http_web1 的使用者。
  • 設定該帳戶,使其密碼永不過期。
  • 在域控制器的命令列中,執行以下命令
ktpass -princ HTTP/web1.example.com@EXAMPLE.COM -mapuser EXAMPLE\http_web1 -crypto DES-CBC-MD5 -ptype KRB5_NT_SRV_HST -pass * -out c:\temp\http_web1.heytab
  • 這將在 C:\temp 中建立一個 keytab 檔案,你需要將其移動到 Web 伺服器並放置在 /etc/http 中。

配置 Apache

[編輯 | 編輯原始碼]

你的配置應該類似於以下內容...

<Location />
   AuthName "Welcome to EXAMPLE"
   AuthType Kerberos
   Krb5Keytab /etc/httpd/http_web1.keytab
   KrbAuthRealm EXAMPLE.COM
   KrbMethodNegotiate On
   KrbSaveCredentials off
   KrbVerifyKDC off
   Require valid-user
   </Location>

可以將 Authname 更改為新名稱。有關特定配置的更多資訊,請檢視 http://modauthkerb.sourceforge.net/

配置 Firefox(可選)

[編輯 | 編輯原始碼]
  1. 在 URL 欄中鍵入 about:config
  2. 修改以下 "首選項名稱"
    • network.negotiate-auth.delegation-uris - Example.com
    • network.negotiate-auth.trusted-uris - Example.com
    • network.automatic-ntlm-auth.trusted-uris - Example.com

如何阻止 Xymon 伺服器發出紅色/紫色警報風暴?

[編輯 | 編輯原始碼]
  • 紅色警報風暴
    • 由少數交換機的故障和錯誤的 bb-hosts 配置(缺少路由器依賴項指令)引起。
    • 配置 fping 訪問控制列表時的人為錯誤。
  • 紫色風暴
    • 由 Xymon 伺服器自身進入非常高的 CPU 負載而導致,這阻止了它正確執行 Xymon 守護程序,因此所有機器都因 30 分鐘內未更新訊息而變為紫色。

如何修復

[編輯 | 編輯原始碼]
  • 部署郵件過濾器以限制 Xymon 伺服器可以傳送的警報數量。

如何從 Xymon 伺服器更新 Xymon 客戶端的配置檔案?

[編輯 | 編輯原始碼]

為什麼?

[編輯 | 編輯原始碼]
  • 為了對所有 Hobbit 客戶端進行全域性變數更改。
    • 例如:將所有客戶端配置為從一個到兩個 Xymon 伺服器傳送 Hobbit 訊息。這將需要修改所有客戶端的 hobbitclient.cfg。如果你只有一小部分客戶端,手動登入到每個機器進行編輯是可以的。但對於一個有 3000 個客戶端的池來說,這種更改最好透過 clientudpate 或叢集 shell 加上 rsh 的方法來完成。
    • 此維基頁面是為了驗證 Xymon 的 clientupdate 是否真的能滿足這種需求。

需要做些什麼?

[編輯 | 編輯原始碼]
  • 使用位於中央 Hobbit 伺服器上的新 hobbit-client.cfg 更新 Hobbit 客戶端上的 hobbit-client.cfg。新的 hobbit-client.cfg 包含將 Hobbit 訊息傳送到兩個 Hobbit 伺服器的新配置。
    • 舊版和新版 hobbit-client.cfg 檔案的差異。
bash-2.05$ diff hobbitclient.cfg hobbitclient.cfg.new
3,4c3,4
< BBDISP="hobbit.test.com"         # IP address of the Hobbit server
< BBDISPLAYS=""                   # IP of multiple Hobbit servers. BBDISP must be "0.0.0.0".
---
> BBDISP="0.0.0.0"      # IP address of the Hobbit server
> BBDISPLAYS="hobbit.test.com hobbit2.test.com"  # IP of multiple Hobbit servers. BBDISP must be "0.0.0.0".
bash-2.05$
  • 確保/修改 ext 目錄中的所有指令碼,將訊息傳送到 BBDISPLAYS。
    • 溫度模組。
      • 原始的
## Report the data to the $BBDISP host
if [ "$TEMPDEBUG" = 1 ]; then
        echo "$DATA"                            # Send it to stdout
else
        $BB $BBDISP "$LINE"                     # SEND IT TO BBDISPLAY
fi
      • 針對兩個 Hobbit 伺服器的更改。
## Report the data to the $BBDISP host
if [ "$TEMPDEBUG" = 1 ]; then
        echo "$DATA"                            # Send it to stdout
else
    if [ "$BBDISP" = "0.0.0.0" ];then
        for i in "$BBDISPLAYS"
        do
        $BB $i "$LINE"                     # SEND IT TO BBDISPLAYS
        done
    else
        $BB $BBDISP "$LINE"                     # SEND IT TO BBDISPLAY
fi

先閱讀手冊

[編輯 | 編輯原始碼]

為了管理更新客戶端而不必登入到每個伺服器,你可以使用 clientupdate 實用程式。這是你如何設定新客戶端版本的釋出。

  1. 確保 Xymon 客戶端外部指令碼將訊息傳送到 "BBDISPLAYS",而不僅僅是 "BBDISP" 變數。
    1. 這需要檢查部署的外部(自制)指令碼,以便修改為將訊息傳送到兩個 Xymon 伺服器。
  2. 建立新客戶端:設定新的客戶端 $BBHOME 目錄,例如,透過將現有客戶端安裝複製到空目錄並根據你的需要進行修改。最好刪除 tmp/ 和 logs/ 目錄中的所有檔案,因為沒有必要將這些檔案複製到所有客戶端。注意 etc./ 檔案,確保它們適合你想部署此新客戶端的系統。你可以新增檔案 - 例如,ext/ 目錄中的擴充套件指令碼 - 但 clientupdate 實用程式不能刪除或重新命名檔案。
  3. 打包客戶端:當你的新客戶端軟體準備就緒時,建立一個新客戶端的 tar 檔案。tar 存檔中的所有檔案必須具有相對於客戶端的 $BBHOME 的檔名(通常,~hobbit/client/)。將 tar 檔案儲存在 Hobbit 伺服器上的 ~hobbit/server/download/somefile.tar 中。不要壓縮它。建議你為檔名使用某種作業系統和版本號方案,但你可以選擇任何適合你的檔名 - 唯一的要求是它必須以 ".tar" 結尾。檔名中 ".tar" 之前的部分是 Hobbit 將用作 "clientversion" ID 的部分。
  4. 配置哪些主機接收新客戶端:在 client-local.cfg(5) 檔案中,你現在必須設定一個 clientversion:ID 行,其中 ID 與你用於 tar 檔案的檔名匹配。因此,如果你已將新客戶端打包到檔案 linux.v2.tar 中,那麼 client-local.cfg 中相應的條目將是 clientversion:linux.v2。
  5. 等待 hobbitd 重新載入 client-local.cfg:hobbitd 最多在 10 分鐘後會自動重新載入 client-local.cfg 檔案。如果你想強制立即重新載入,請向 hobbitd 程序傳送 SIGHUP 訊號。
  6. 等待客戶端更新:下次客戶端聯絡 Hobbit 伺服器傳送客戶端資料時,它將注意到 client-local.cfg 中的新的 clientversion 設定,並將執行 clientupdate 來安裝新的客戶端軟體。因此,當客戶端下次執行時,它將使用新的客戶端軟體。

開始使用 clientupdate

[編輯 | 編輯原始碼]
  • 找出 hobbiclient 版本,我們從 "clientupdate --level" 的輸出中執行 4.2.0。
 bash-3.00$ ./bbcmd
 2009-01-28 20:50:39 Using default environment file /etc/opt/hobbitclient42/hobbitclient.cfg
 bash-3.00$ ./clientupdate --level
 4.2.0
 bash-3.00$
 
    • 或者從 clientversion.cfg 中剪下版本。
bash-3.00$ cat  clientversion.cfg
4.2.0
bash-3.00$
  • 執行更新,但伺服器端沒有新版本。
bash-3.00$ ./clientupdate
2009-01-28 20:53:25 No new version string!
bash-3.00$

clientupdate 的錯誤訊息

[編輯 | 編輯原始碼]
  • 核心轉儲,因為我們沒有先執行 bbcmd。clientupdate.c 需要更新以避免核心轉儲。
bash-3.00$ ./clientupdate
2009-01-28 20:49:13 xgetenv: Cannot find value for variable ETCBBHOME
Segmentation Fault (core dumped)
bash-3.00$

  • "--suid-setup failed: No such file or directory",伺服器端沒有任何配置。
bash-2.05$ ./clientupdate --update=4.2.1
tar: blocksize = 0
2009-01-28 16:03:39 exec() of clientupdate --suid-setup failed: No such file or directory
bash-2.05$

如何配置 sudo 以使 Hobbit 客戶端獲得有限的 root 許可權?

[編輯 | 編輯原始碼]

將 SUDO 路徑新增到 Hobbit 客戶端主指令碼

[編輯 | 編輯原始碼]

我們需要修改 hobbitclient.sh$.{OS} 以使用 sudo,在 root 許可權訪問時無需提示密碼。以下是 Linux 客戶端的補丁。你需要對其他作業系統型別進行類似的修補。

[root:myhbserver] cat  src/hobbitclient.sh.linux.patch
--- client/hobbitclient.sh.orig 2008-04-12 08:41:20.050938000 -0500
+++ client/hobbitclient.sh      2008-04-12 08:41:26.224999984 -0500
@@ -18,7 +18,16 @@
 LANG=C
 LC_ALL=C
 LC_MESSAGES=C
-export LANG LC_ALL LC_MESSAGES
+# Why : Make hobbit client to be non-intrusive and avoid chmod system file
+# What: use sudo to fetch /var/log/messages on linux in 600 file mode
+# # Rules for HOBBIT client
+# logfech will failed on Linux because /var/log/messages is default to 600
+# User_Alias HOBBITCLIENT = hobbitc
+# Cmnd_Alias HOBBITCLIENTCMDS = /usr/sbin/swapinfo,/usr/sbin/vxdisk,/usr/bin/ipmitool,/opt/bin/logfetch
+# HOBBITCLIENT ALL = NOPASSWD: HOBBITCLIENTCMDS
+
+SUDO=/opt/bin/sudo
+export LANG LC_ALL LC_MESSAGES SUDO

 LOCALMODE="no"
 if test $# -ge 1; then
@@ -53,7 +62,7 @@
 # logfiles
 if test -f $LOGFETCHCFG
 then
-    $HOBBITCLIENTHOME/bin/logfetch $LOGFETCHCFG $LOGFETCHSTATUS >>$MSGTMPFILE
+    ${SUDO} $HOBBITCLIENTHOME/bin/logfetch $LOGFETCHCFG $LOGFETCHSTATUS >>$MSGTMPFILE
 fi
 # Client version
 echo "[clientversion]"  >>$MSGTMPFILE
[root:myhbserver]

配置你的 sudoer 檔案

[編輯 | 編輯原始碼]

hobbits = Hobbit 伺服器使用者帳戶。hobbitc = Hobbit 客戶端帳戶。

[root:myhbserver] cat /opt/sudo16/etc/sudoers  |grep -v ^$ |grep -v ^#
root    ALL=(ALL) ALL
User_Alias HOBBITUSER = hobbits
Cmnd_Alias HOBBITSVERTCMDS = /opt/fping24/sbin/fping
HOBBITUSER ALL = NOPASSWD: HOBBITSVERTCMDS
User_Alias HOBBITUSER = hobbitc
Cmnd_Alias HOBBITCLIENTCMDS = /usr/sbin/swapinfo,/usr/sbin/vxdisk
HOBBITUSER ALL = NOPASSWD: HOBBITCLIENTCMDS
[root:myhbserver]

確定主機是否未配置為發出警報

[編輯 | 編輯原始碼]

no-alerts.pl 列表

[編輯 | 編輯原始碼]
#! /usr/bin//perl
##########################################################################################
#
# no-alerts.pl - This script uses bbhostgrep to get a list of sevrers, then fetches their
#       info test. It then parses this looking for 'No Alerts Defined' It then outputs the
#       hostname of the machines that are missing alert config.
#
#  Created by Stewart Larsen
#  06/02/2008: minor editing T.J. Yang
##########################################################################################

use strict;
use LWP::Simple;

# Set debug to 1 to see the hosts and URL as you loop through.
my $debug = 0;

#Token in bb-hosts to indicate we need to run firewall tests on this device my $test_name = '*';
##########################################################################################
# Constant:
##########################################################################################
my $CUT  = "/bin/cut";
my $SORT = "/bin/sort";
my $UNIQ = "/usr/bin/uniq";
#ip/domain : server to poll for information
my $BBDISP = "hobbit.test.com";
# hobbit server  install directory
my $HOBBITHOME ="/opt/hobbitserver42";
my $BBHOSTGREP = "$HOBBITHOME/bin/bbhostgrep";

##########################################################################################
# Variables:
##########################################################################################

# Paths - Fetch all hosts and trim for just the host name.
# Then sort and unique the list

my $HOSTGREPOUT="$BBHOSTGREP '*'| $CUT -d' ' -f2 | $SORT  | $UNIQ ";

##########################################################################################
# Main Program:
##########################################################################################

open (INPUT, "-|",$HOSTGREPOUT ) or die "Cannot open input: $!\n";
while(<INPUT>)
{
        chomp (my $host = $_);
        my $fetch_URL = 'http://'.$BBDISP.'/hobbit-cgi/bb-hostsvc.sh?HOST='.$host.'&SERVICE=info';
        print "$host: $fetch_URL\n" if $debug;

        my $content = get $fetch_URL;
        if (!defined $content)
        {
                warn "Couldn't get $fetch_URL";
                next;
        }

        if($content =~ m/No Alerts Defined/i)
        {
                print "$host has no alerts defined\n";
        }
}
close INPUT;

如何監控和繪製 Flexlm 許可證使用情況圖表?

[編輯 | 編輯原始碼]

指令碼

[編輯 | 編輯原始碼]

伺服器端的 rrd 配置檔案

[編輯 | 編輯原始碼]
[flexlm]
TITLE License counts 
YAXIS #

DEF:matlab=flexlm.rrd:MATLAB:AVERAGE
LINE2:matlab#FF0000:Matlab
COMMENT:\n
GPRINT:matlab:LAST:Matlab \: %5.1lf%s (cur)
GPRINT:matlab:MAX: \: %5.1lf%s (max)
GPRINT:matlab:MIN: \: %5.1lf%s (min)
GPRINT:matlab:AVERAGE: \: %5.1lf%s (avg)\n

DEF:simulink=flexlm.rrd:SIMULINK:AVERAGE
LINE2:simulink#CC3333:Simulink
COMMENT:\n
GPRINT:simulink:LAST:Simulink \: %5.1lf%s (cur)
GPRINT:simulink:MAX: \: %5.1lf%s (max)
GPRINT:simulink:MIN: \: %5.1lf%s (min)
GPRINT:simulink:AVERAGE: \: %5.1lf%s (avg)\n

DEF:commtlb=flexlm.rrd:CommunicationToolb:AVERAGE
LINE2:commtlb#66CC66:Communication Toolb
COMMENT:\n
GPRINT:commtlb:LAST:Communication Toolb \: %5.1lf%s (cur)
GPRINT:commtlb:MAX: \: %5.1lf%s (max)
GPRINT:commtlb:MIN: \: %5.1lf%s (min)
GPRINT:commtlb:AVERAGE: \: %5.1lf%s (avg)\n

DEF:ctrltlb=flexlm.rrd:ControlToolbox:AVERAGE
LINE2:ctrltlb#6666CC:Control Toolbox
COMMENT:\n
GPRINT:ctrltlb:LAST:Control Toolbox \: %5.1lf%s (cur)
GPRINT:ctrltlb:MAX: \: %5.1lf%s (max)
GPRINT:ctrltlb:MIN: \: %5.1lf%s (min)
GPRINT:ctrltlb:AVERAGE: \: %5.1lf%s (avg)\n

DEF:fintlb=flexlm.rrd:FinancialToolbox:AVERAGE
LINE2:fintlb#00FF00:Financial Toolbox
COMMENT:\n
GPRINT:fintlb:LAST:Financial Toolbox \: %5.1lf%s (cur)
GPRINT:fintlb:MAX: \: %5.1lf%s (max)
GPRINT:fintlb:MIN: \: %5.1lf%s (min)
GPRINT:fintlb:AVERAGE: \: %5.1lf%s (avg)\n

DEF:fztlb=flexlm.rrd:FuzzyToolbox:AVERAGE
LINE2:fztlb#66FF66:Fuzzy Toolbox
COMMENT:\n
GPRINT:fztlb:LAST:Fuzzy Toolbox \: %5.1lf%s (cur)
GPRINT:fztlb:MAX: \: %5.1lf%s (max)
GPRINT:fztlb:MIN: \: %5.1lf%s (min)
GPRINT:fztlb:AVERAGE: \: %5.1lf%s (avg)\n

DEF:imgtlb=flexlm.rrd:ImageToolbox:AVERAGE
LINE2:imgtlb#0000FF:Image Toolbox
COMMENT:\n
GPRINT:imgtlb:LAST:Image Toolbox \: %5.1lf%s (cur)
GPRINT:imgtlb:MAX: \: %5.1lf%s (max)
GPRINT:imgtlb:MIN: \: %5.1lf%s (min)
GPRINT:imgtlb:AVERAGE: \: %5.1lf%s (avg)\n

DEF:compiler=flexlm.rrd:Compiler:AVERAGE
LINE2:compiler#6666FF:Compiler
COMMENT:\n
GPRINT:compiler:LAST:Compiler \: %5.1lf%s (cur)
GPRINT:compiler:MAX: \: %5.1lf%s (max)
GPRINT:compiler:MIN: \: %5.1lf%s (min)
GPRINT:compiler:AVERAGE: \: %5.1lf%s (avg)\n

DEF:neuralnettlb=flexlm.rrd:NeuralNetworkTool:AVERAGE
LINE2:neuralnettlb#FFFF00:Neural Network Tool
COMMENT:\n
GPRINT:neuralnettlb:LAST:Neural Network Tool \: %5.1lf%s (cur)
GPRINT:neuralnettlb:MAX: \: %5.1lf%s (max)
GPRINT:neuralnettlb:MIN: \: %5.1lf%s (min)
GPRINT:neuralnettlb:AVERAGE: \: %5.1lf%s (avg)\n

DEF:opttlb=flexlm.rrd:OptimizationToolbo:AVERAGE
LINE2:opttlb#00FFFF:Optimization Toolbo
COMMENT:\n
GPRINT:opttlb:LAST:Optimization Toolbo \: %5.1lf%s (cur)
GPRINT:opttlb:MAX: \: %5.1lf%s (max)
GPRINT:opttlb:MIN: \: %5.1lf%s (min)
GPRINT:opttlb:AVERAGE: \: %5.1lf%s (avg)\n

DEF:distributedtlb=flexlm.rrd:DistribComputingT:AVERAGE
LINE2:distributedtlb#CC66CC:Distrib Computing T
COMMENT:\n
GPRINT:distributedtlb:LAST:Distrib Computing T \: %5.1lf%s (cur)
GPRINT:distributedtlb:MAX: \: %5.1lf%s (max)
GPRINT:distributedtlb:MIN: \: %5.1lf%s (min)
GPRINT:distributedtlb:AVERAGE: \: %5.1lf%s (avg)\n

DEF:pdetlb=flexlm.rrd:PDEToolbox:AVERAGE
LINE2:pdetlb#CCCC66:PDE Toolbox
COMMENT:\n
GPRINT:pdetlb:LAST:PDE Toolbox \: %5.1lf%s (cur)
GPRINT:pdetlb:MAX: \: %5.1lf%s (max)
GPRINT:pdetlb:MIN: \: %5.1lf%s (min)
GPRINT:pdetlb:AVERAGE: \: %5.1lf%s (avg)\n

DEF:signaltlb=flexlm.rrd:SignalToolbox:AVERAGE
LINE2:signaltlb#66CCCC:Signal Toolbox
COMMENT:\n
GPRINT:signaltlb:LAST:Signal Toolbox \: %5.1lf%s (cur)
GPRINT:signaltlb:MAX: \: %5.1lf%s (max)
GPRINT:signaltlb:MIN: \: %5.1lf%s (min)
GPRINT:signaltlb:AVERAGE: \: %5.1lf%s (avg)\n

DEF:simulctrl=flexlm.rrd:SimulinkControlDe:AVERAGE
LINE2:simulctrl#CCCC00:Simulink Control
COMMENT:\n
GPRINT:simulctrl:LAST:Simulink Control \: %5.1lf%s (cur)
GPRINT:simulctrl:MAX: \: %5.1lf%s (max)
GPRINT:simulctrl:MIN: \: %5.1lf%s (min)
GPRINT:simulctrl:AVERAGE: \: %5.1lf%s (avg)\n

DEF:stattlb=flexlm.rrd:StatisticsToolbox:AVERAGE
LINE2:stattlb#999966:Statistics Toolbox
COMMENT:\n
GPRINT:stattlb:LAST:Statistics Toolbox \: %5.1lf%s (cur)
GPRINT:stattlb:MAX: \: %5.1lf%s (max)
GPRINT:stattlb:MIN: \: %5.1lf%s (min)
GPRINT:stattlb:AVERAGE: \: %5.1lf%s (avg)\n

DEF:symboltlb=flexlm.rrd:SymbolicToolbox:AVERAGE
LINE2:symboltlb#FFCC00:Symbolic Toolbox
COMMENT:\n
GPRINT:symboltlb:LAST:Symbolic Toolbox \: %5.1lf%s (cur)
GPRINT:symboltlb:MAX: \: %5.1lf%s (max)
GPRINT:symboltlb:MIN: \: %5.1lf%s (min)
GPRINT:symboltlb:AVERAGE: \: %5.1lf%s (avg)\n

DEF:idtlb=flexlm.rrd:IdentificationTool:AVERAGE
LINE2:idtlb#FF00FF:Identification Tool
COMMENT:\n
GPRINT:idtlb:LAST:Identification Tool \: %5.1lf%s (cur)
GPRINT:idtlb:MAX: \: %5.1lf%s (max)
GPRINT:idtlb:MIN: \: %5.1lf%s (min)
GPRINT:idtlb:AVERAGE: \: %5.1lf%s (avg)\n

如何建立 Hobbit 客戶端自定義測試指令碼?

[編輯 | 編輯原始碼]

任何可以透過指令碼或自定義程式自動執行的操作都可以新增到 Hobbit 中。www.deadcat.net 存檔中提供了許多針對 Big Brother 的擴充套件指令碼,如果你在 Hobbit 中執行這些指令碼,它們通常無需修改即可使用。有時需要一些小的調整 - 如果你不知道如何操作,可以向 Hobbit 郵件列表尋求幫助。

但是,如果你需要測試一些獨特的東西,編寫擴充套件指令碼非常簡單。你需要弄清楚一些事情

  • 你將使用什麼名稱作為列名?
  • 你將如何測試它?
  • 什麼標準應該決定測試是紅色、黃色還是綠色?
  • 您將在狀態訊息中包含來自測試的哪些額外資料?

一個簡單的客戶端擴充套件指令碼如下所示

#!/bin/sh
 
COLUMN=mytest	# Name of the column
COLOR=green		# By default, everything is OK
MSG="Bad stuff status"

# Do whatever needed to test for something
# As an example, go red if /tmp/badstuff exists.
if test -f /tmp/badstuff
then
   COLOR=red
   MSG="${MSG}

   `cat /tmp/badstuff`
   "
else
   MSG="${MSG}

   All is OK
   "
fi

# Tell Hobbit about it
$BB $BBDISP "status $MACHINE.$COLUMN $COLOR `date` ${MSG}"

exit 0

您會注意到一些環境變數是預定義的:BB、BBDISP、MACHINE 都是當您透過 hobbitlaunch 執行指令碼時由 Hobbit 提供的。還要注意 MSG 變數是如何用於構建狀態訊息的 - 它最初只包含“糟糕的事情狀態”,然後當我們確定狀態時,您會在訊息中新增資料。

要執行它,將您的指令碼儲存在 ~hobbit/client/ext/ 目錄中(即,您安裝 Hobbit 客戶端的 ext/ 目錄中),然後在 ~hobbit/client/etc/clientlaunch.cfg(或伺服器上的 ~hobbit/server/etc/hobbitlaunch.cfg)檔案中新增一個新部分,如下所示

[myscript]
   ENVFILE $HOBBITCLIENTHOME/etc/hobbitclient.cfg
   CMD $HOBBITCLIENTHOME/ext/myscript.sh
   LOGFILE $HOBBITCLIENTHOME/logs/myscript.log
   INTERVAL 5m

您可能希望為自定義指令碼建立的新列新增描述。在 hobbit *伺服器* 上,編輯檔案 $BBHOME/columndoc.csv,新增一行,例如

myscript;The <b>myscript</b> column shows the status of my custom script.;

如何編寫伺服器端模組?

[編輯 | 編輯原始碼]

伺服器端指令碼看起來與客戶端指令碼幾乎相同,但它們通常會使用 bbhostgrep 實用程式來挑選出在 bb-hosts 檔案中定義了特殊標籤的主機,然後為每個主機發送一條狀態訊息。像這樣

#!/bin/sh

BBHTAG=foo           # What we put in bb-hosts to trigger this test
COLUMN=$BBHTAG	# Name of the column, often same as tag in bb-hosts

$BBHOME/bin/bbhostgrep $BBHTAG | while read L
do
   set $L	# To get one line of output from bbhostgrep

   HOSTIP="$1"
   MACHINEDOTS="$2"
   MACHINE='echo $2 | $SED -e's/\./,/g'`

   COLOR=green
   MSG="$BBHTAG status for host $MACHINEDOTS"

   #... do the test, perhaps modify COLOR and MSG

   $BB $BBDISP "status $MACHINE.$COLUMN $COLOR `date`

   ${MSG}
   "
done
 
exit 0

請注意,對於伺服器端測試,您需要遍歷在 bb-hosts 檔案中找到的主機列表,併為每個主機發送一條狀態訊息。除此之外,它就像客戶端測試一樣。

此指令碼儲存在 ~/hobbit/server/ext/my_script.sh 中,您可以在 ~hobbit/server/etc/hobbitlaunch.cfg 中新增其描述

[foo]
   ENVFILE $BBTHOME/etc/hobbitserver.cfg
   CMD $BB/ext/my_script.sh
   LOGFILE $BB/logs/myscript.log
   INTERVAL 5m

現在可以將服務新增到 bb-hosts 檔案中

127.0.0.1 my_server # foo

如何在將自定義指令碼新增到正在執行的代理之前測試它?

[編輯 | 編輯原始碼]

在啟用新的自定義指令碼之前,檢查其功能和在 stdout 上的輸出很有用。

要在命令列上執行指令碼,您必須載入所有 xymon 環境並將 $BB 命令替換為“echo”。

您可以透過插入此程式碼片段並在命令列上執行它來輕鬆地動態執行此操作,然後測試您的指令碼

TEST=1 ./my_script.sh

如果您想在測試後將其新增到 hobbitlaunch.cfg,則無需在指令碼中進行任何更改。

#!/bin/sh
...
# Test-Mode ?
# TEST=0 => works in cooperation with Xymon agent (default)
# TEST=1 => for testing, results to stdout (run "TEST=1 ./bb-testname.sh" on cmd-line)
# TEST>1 => for testing, but sending results to Xymon server without activating script in hobbitlaunch.cfg
TEST=${TEST:-"0"}
if [ "$TEST" -gt "0" ]
then
  BBHOME="$HOME/xymon/server"
  . $BBHOME/etc/hobbitserver.cfg
  BBQUERYCMD=$BB
  [ "$TEST" = "1" ] && BB="echo"
fi
...

這對客戶端指令碼和伺服器端指令碼都有效。

當然,您必須更改環境的路徑設定。

Hobbit 客戶端和 ZFS 監控

[編輯 | 編輯原始碼]
  • 有關簡單的 ZFS 池示例,請參閱 ZFS 教程
  • 在此示例中,我們有第 3 和第 4 個磁碟可用於 zfs。第 1 和第 2 個已在 SVM 下。
bash-3.00# metastat |tail -3
Device   Reloc  Device ID
c0t1d0   Yes    id1,sd@SSEAGATE_ST336607LSUN36G_3JA6ECDF00007418PJ5V
c0t0d0   Yes    id1,sd@SSEAGATE_ST336607LSUN36G_3JA6EGFK00007418A7PM
bash-3.00#

bash-3.00# format
Searching for disks...done

AVAILABLE DISK SELECTIONS:
       0. c0t0d0 <SUN36G cyl 24620 alt 2 hd 27 sec 107>
          /pci@1c,600000/scsi@2/sd@0,0
       1. c0t1d0 <SUN36G cyl 24620 alt 2 hd 27 sec 107>
          /pci@1c,600000/scsi@2/sd@1,0
       2. c0t2d0 <HITACHI-DK32EJ36NSUN36G-PQ0B-33.92GB>
          /pci@1c,600000/scsi@2/sd@2,0
       3. c0t3d0 <HITACHI-DK32EJ36NSUN36G-PQ0B-33.92GB>
          /pci@1c,600000/scsi@2/sd@3,0
Specify disk (enter its number):
bash-3.00# zpool create -f mypool mirror c0t2d0 c0t3d0
bash-3.00# zpool list
NAME                    SIZE    USED   AVAIL    CAP  HEALTH     ALTROOT
mypool                 33.8G   84.5K   33.7G     0%  ONLINE     -
bash-3.00#
  • Mike Rowell <Mike.Rowell@Rightmove.co.uk> 有以下 ZFS hb 外部模組。
#!/bin/ksh
# Revision History: 
# 1. Mike Rowell <Mike.Rowell@Rightmove.co.uk>, original
# 2. Uwe Kirbach <U.Kirbach@EnBW.com>
# 3. T.J. Yang: add in some comments.

DISKYELL=80
DISKRED=90
TEST="zfs"
DISPCOLOR="green"
FIRST_LINE="zfs - okay"
FIRST_LINE_HEALTH="okay"
FIRST_LINE_CAP="okay"

#What: beautify the page display by html code.
STRING="<table border=0 cellpadding=10><tr><th></th><th>Zpool Name</th><th>Status</th><th>Capacity</th></tr>"
#What: a loop to parse output of "zpool list -H" output.
# bash-3.00# zpool list
# NAME                    SIZE    USED   AVAIL    CAP  HEALTH     ALTROOT
# mypool                 33.8G   84.5K   33.7G     0%  ONLINE     -
# bash-3.00# zpool list -H
# mypool  33.8G   84.5K   33.7G   0%      ONLINE  -
# bash-3.00#

/usr/sbin/zpool list -H | while read name size used avail cap health altroot
do
  LINE_COLOR="green"

  if [ "${health}" == "ONLINE" ]; then
    HEALTH_COLOR="green"
  elif [ "${health}" == "DEGRADED" ]; then
    HEALTH_COLOR="yellow"
  elif [ "${health}" == "FAULTED" ]; then
    HEALTH_COLOR="red"
  fi

  cap=`echo ${cap} | cut -d% -f1` 
  if [ ${cap} -lt $DISKYELL ]; then
    CAP_COLOR="green" 
  elif [ ${cap} -gt $DISKYELL ]; then 
    CAP_COLOR="yellow"
  elif [ ${cap} -gt $DISKRED ]; then
    CAP_COLOR="red"
  fi

  if [ "$HEALTH_COLOR" == "red" -o "$HEALTH_COLOR" == "yellow" -o "$CAP_COLOR" == "red" -o "$CAP_COLOR" == "yellow" ]; then
    DISPCOLOR=$COLOR
    LINE_COLOR=$COLOR
  fi

  case $HEALTH_COLOR in
    red)    FIRST_LINE_HEALTH="faulted" ;;
    yellow) FIRST_LINE_HEALTH="degraded" ;;
  esac

  case $CAP_COLOR in
    red)    FIRST_LINE_CAP="full" ;;
    yellow) FIRST_LINE_CAP="nearly full" ;;
  esac

  STRING="$STRING <tr><td>&${LINE_COLOR}</td><td>${name}</td><td>${health}</td><td>${cap}</td></tr>"
done

# What: accumulate the bb message strings.
STRING="$STRING </table><br><br>"
STRING="$STRING`/usr/sbin/zpool status -xv`"
FIRST_LINE="zfs - health: $FIRST_LINE_HEALTH - capacity: $FIRST_LINE_CAP"

# What: Sent out the final bb message to hobbit server.
$BB $BBDISP "status $MACHINE.$TEST $DISPCOLOR `date` $FIRST_LINE $STRING"
  • 在 hobbit 客戶端上測試。
bash-3.00$ export BB=/opt/hobbitclient42/bin/bb
bash-3.00$ export BBDISP="hobbit.my.com"
bash-3.00$ export MACHINE="hobbitclient.my.com"
bash-3.00$ ksh -x  zfs.ksh
+ DISKYELL=80
+ DISKRED=90
+ TEST=zfs
+ COLOR=GREEN
+ STRING=<table border=0 cellpadding=10><tr><th></th><th>Zpool Name</th><th>Status</th><th>Capacity</th></tr>
+ read name size used avail cap health altroot
+ /usr/sbin/zpool list -H
+ [ ONLINE == ONLINE ]
+ COLOR=green
+ cut -d% -f1
+ echo 0%
+ [ 0 -lt 80 ]
+ COLOR=green
+ [ green == red -o green == yellow ]
+ STRING=<table border=0 cellpadding=10><tr><th></th><th>Zpool Name</th><th>Status</th><th>Capacity</th></tr> <tr><td>&green</td><td>mypool</td><td>ONLINE</td><td>0%</td></tr>
+ read name size used avail cap health altroot
+ STRING=<table border=0 cellpadding=10><tr><th></th><th>Zpool Name</th><th>Status</th><th>Capacity</th></tr> <tr><td>&green</td><td>mypool</td><td>ONLINE</td><td>0%</td></tr> </table><br><br>
+ + /usr/sbin/zpool status -xv
STRING=<table border=0 cellpadding=10><tr><th></th><th>Zpool Name</th><th>Status</th><th>Capacity</th></tr> <tr><td>&green</td><td>mypool</td><td>ONLINE</td><td>0%</td></tr> </table><br><br>all pools are healthy
+ date
+ /opt/hobbitclient42/bin/bb hobbit.my.com status .zfs  Thu Apr 12 10:05:43 CDT 2007 <table border=0 cellpadding=10><tr><th></th><th>Zpool Name</th><th>Status</th><th>Capacity</th></tr> <tr><td>&green</td><td>mypool</td><td>ONLINE</td><td>0%</td></tr> </table><br><br>all pools are healthy
bash-3.00$
  • 檢查資料是否到達 Hobbit 伺服器。

使用 Big Brother 指令碼而不將其轉換為 hobbit

[編輯 | 編輯原始碼]

在您的 hobbit 伺服器上執行最新的 Big Brother 客戶端。從該客戶端執行所需的指令碼,它將向 hobbit 報告。例如,使用最新的“bb-mrtg.pl”指令碼監控您的 mrtg 圖表

新增自定義圖表

[編輯 | 編輯原始碼]

閱讀 hobbitd_rrd 的手冊頁

新增對資料庫後端的支援

[編輯 | 編輯原始碼]

我還沒有這樣做,但這將很容易實現。為了報告,您只想瞭解發生了哪些狀態變化,因此您只需想出一個 Hobbit“工作模組”來接收來自 Hobbit“stachg”通道的訊息,並將它們儲存在您的資料庫中。

工作模組可以用您喜歡的任何語言編寫,儘管出於效能原因,我不建議使用 shell 指令碼。Perl、Python、C、C++、Java……選擇您最喜歡的程式設計工具。

該模組需要做的只是從其標準輸入檔案控制代碼中讀取訊息並將它們儲存在資料庫中。每條訊息的格式如下

 @@stachg|timestamp|sender|origin|hostname|testname|expiretime|color|prevcolor|changetime
 <new status message>
 @@

很容易挑選出第一行並從該行中獲取所有必要的資訊。

Hobbit 原始碼中提供了一個示例模組,請參閱“hobbit-4.0-RC4/hobbitd/hobbitd_sample.c”檔案,該檔案說明了如何在 C 中構建工作模組。

將 Hobbit 作為具有 BB 伺服器的客戶端安裝

[編輯 | 編輯原始碼]

如果您想將 Hobbit 作為具有 BB 伺服器的客戶端使用,則有一些需要注意的地方:Hobbit 客戶端通常從伺服器獲取其配置,並且標準協議不同。為了使其向後相容,需要在 hobbit 客戶端側進行一些變通方法。

Debian Unix 作業系統的示例,如有必要,請調整。

以 root 身份啟動

  apt-get install gcc make
  apt-get install libpcre3 libpcre3-dev
  useradd -m hobbit
  su - hobbit

我們是 hobbit!

  tar zxfv .../hobbit-4.2.0.tar.gz
  cd hobbit-4.2.0
  ./configure --client
回答客戶端
回答 hobbit
回答 /home/hobbit
回答 10.0.4.5(用您的 BB 伺服器的 IP 地址替換)
  make
  make install
  cd
  chmod +w client/runclient.sh
  vi client/runclient.sh
新增 MACHINEDOTS="f.q.d.n",即客戶端的 fqdn
在以 hobbitlaunch 開頭的行上新增 --local
  vi client/etc/hobbitclient.cfg
新增 BBMAXMSGSPERCOMBO=1
  exit

我們再次是 root!

建立 /etc/init.d/hobbit 如下

  #!/bin/sh
  su hobbit -c "/home/hobbit/client/runclient.sh $1"
  
  chmod +x /etc/init.d/hobbit
  update-rc.d hobbit defaults
  
  /etc/init.d/hobbit start

使用反向 SSH 隧道監控 DMZ 中的 Hobbit 客戶端

[編輯 | 編輯原始碼]

注意:在 使用 Xymon 進行系統監控/管理指南 頁面上記錄了執行此類操作的其他方法。

作業系統:Red Hat Enterprise Linux 5
Hobbit 版本:Hobbit 4.2.0

在某些情況下,您可能希望監控與 Hobbit 伺服器透過防火牆隔開的 Hobbit 客戶端(例如,位於 DMZ 中的 Hobbit 客戶端),並且您無法從 Hobbit 客戶端到 Hobbit 伺服器開啟埠 1984 的入站連線。另一種選擇是使用反向 SSH 隧道,使用 Padraig Lennon 的 ssh_tunnels.sh 指令碼

請注意,為了本文件的目的,假設 hobbit 使用者的主目錄為 /usr/lib/hobbit

無密碼 SSH 身份驗證

[編輯 | 編輯原始碼]

對於 hobbit 使用者,在 Hobbit 伺服器和 Hobbit 客戶端之間設定無密碼 SSH 身份驗證。

在 Hobbit 伺服器上,使用空密碼生成私鑰/公鑰對

# su - hobbit

$ ssh-keygen -t dsa

Generating public/private dsa key pair.
Enter file in which to save the key (/usr/lib/hobbit/.ssh/id_dsa):
Created directory '/usr/lib/hobbit/.ssh'.
Enter passphrase (empty for no passphrase):  <-- Ensure that you create an empty passphrase, i.e. just hit Enter.
Enter same passphrase again:
Your identification has been saved in /usr/lib/hobbit/.ssh/id_dsa.
Your public key has been saved in /usr/lib/hobbit/.ssh/id_dsa.pub.
The key fingerprint is:
xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:x:xx:xx hobbit@servername

這應該在位於 hobbit 使用者主目錄中的 .ssh 目錄中建立以下檔案

$ ls -ld /usr/lib/hobbit/.ssh
drwx------ 2 hobbit hobbit 4096 Aug 14 12:16 /usr/lib/hobbit/.ssh

$ ls -lR /usr/lib/hobbit/.ssh
/usr/lib/hobbit/.ssh:
total 12
-rw------- 1 hobbit hobbit  668 Aug 14 12:14 id_dsa
-rw-r--r-- 1 hobbit hobbit  603 Aug 14 12:14 id_dsa.pub

如果由於某種原因金鑰對的建立失敗,請嘗試在生成金鑰對之前手動在 hobbit 使用者的主目錄中建立 .ssh 資料夾。確保該資料夾由 hobbit 使用者和組擁有,並且其許可權正確

# chown hobbit:hobbit /usr/lib/hobbit/.ssh
# chmod 700 /usr/lib/hobbit/.ssh

現在,您想將生成的公鑰(id_dsa.pub)複製到 Hobbit 客戶端。確保 .ssh 資料夾以相同的許可權存在於 Hobbit 客戶端上的 hobbit 使用者中,然後將 id_dsa.pub 複製到 Hobbit 客戶端

$ scp /usr/lib/hobbit/.ssh/id_dsa.pub hobbit@hobbitclient:/usr/lib/hobbit/

在 Hobbit 客戶端上

將從 Hobbit 伺服器複製的公鑰從“id_dsa.pub”重新命名為“authorized_keys”。

$ mv /usr/lib/hobbit/id_dsa.pub /usr/lib/hobbit/authorized_keys

將 authorized_keys 檔案移動到 hobbit 使用者的 .ssh 目錄。

$ mv /usr/lib/hobbit/authorized_keys /usr/lib/hobbit/.ssh/

檢查 authorized_keys 檔案是否具有正確的許可權(chmod 644)。

$ ls -l /usr/lib/hobbit/.ssh/authorized_keys
-rw-r--r--  1 hobbit hobbit 603 Aug 14 12:20 /usr/lib/hobbit/.ssh/authorized_keys

從伺服器 SSH 到客戶端。您應該在提示時將客戶端的主機金鑰新增到伺服器的 known_hosts 檔案中,但不會提示輸入密碼。

配置 Hobbit 客戶端

[編輯 | 編輯原始碼]

在 Hobbit 客戶端上將以下行新增到 /usr/lib/hobbit/client/etc/hobbitclient.cfg 中

BBDISP="127.0.0.1"

將 /etc/default/hobbit-client 配置如下

HOBBITSERVERS="127.0.0.1"

重啟 Hobbit 客戶端上的 hobbit-client 服務。

配置 Hobbit 伺服器

[編輯 | 編輯原始碼]

將 ssh-tunnels.sh 指令碼複製到 Hobbit 伺服器上的以下位置,並確保其許可權正確(chmod 755)

-rwxr-xr-x 1 root root 5469 Aug 14 12:30 /usr/lib/hobbit/server/ext/ssh-tunnels.sh

修改 /etc/hobbit/hobbitlaunch.cfg

[ssh-tunnel]
    ENVFILE /usr/lib/hobbit/server/etc/hobbitserver.cfg
    CMD $BBHOME/ext/ssh-tunnels.sh
    LOGFILE $BBSERVERLOGS/ssh-tunnels.log
    INTERVAL 1m

在 /etc/hobbit/bb-hosts 檔案中新增 Hobbit 客戶端的條目(如果伺服器到客戶端不允許 ping,請使用“noconn”)

xx.xx.xx.xx    clientname       # noconn ssh-tunnel

如果 Hobbit 客戶端的名稱無法由 Hobbit 伺服器解析,請在 Hobbit 伺服器的 /etc/hosts 檔案中新增這些客戶端的條目

xx.xx.xx.xx    clientname

從 ssh-tunnel.sh 版本 0.0.3 開始,您可以指定非標準 SSH 埠進行連線。例如

xx.xx.xx.xx    clientname       # noconn ssh-tunnel:2222

您也可以為客戶端建立一個 DNS 條目,哪種更簡單就用哪種。

以 hobbit 使用者身份,手動 SSH 到每個 Hobbit 客戶端至少一次,並在提示時將 Hobbit 客戶端的主機金鑰新增到 Hobbit 伺服器的 known_hosts 檔案中

$ ssh clientname
The authenticity of host 'clientname (xx.xx.xx.xx)' can't be established.
RSA key fingerprint is xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:x:xx:xx.
Are you sure you want to continue connecting (yes/no)?  yes

重啟 Hobbit 伺服器上的 hobbit 服務

# service hobbit restart

確認功能

[編輯 | 編輯原始碼]

檢視 /var/log/hobbit/ssh-tunnels.log 中是否有任何錯誤訊息,例如:

ssh: clientname: Name or service not known

解決方案:確保 Hobbit 伺服器可以解析 Hobbit 客戶端的名稱,例如在 Hobbit 伺服器的 /etc/hosts 檔案中新增 Hobbit 客戶端的條目。

Host key verification failed.

解決方案:從 Hobbit 伺服器手動 SSH 到 Hobbit 客戶端至少一次,並在提示時將 Hobbit 客戶端的主機金鑰新增到 Hobbit 伺服器的 known_hosts 檔案中。

您可以驗證 SSH 隧道是否已成功建立

$ ps -ef | grep ssh
hobbit    2187     1  0 Aug14 ?        00:00:02 ssh -fnNR 1984:hobbit:1984 clientname
hobbit    2805     1  0 Aug14 ?        00:00:02 ssh -fnNR 1984:hobbit:1984 clientname2

您還應該在 Hobbit 伺服器的 Web 介面中看到一個名為“ssh-tunnel”的新列。

行動電話客戶端

[編輯 | 編輯原始碼]

如果您想從您的行動電話檢查您的 hobbit / Xymon 狀態,您可以使用以下應用程式

XyMon by dot knowledge: http://www.dot-knowledge.de/Home/android/xymon-monitor(在其中您可以找到 Android 市場連結)

Xydroid by Rune B. Broberg: http://mihtjel.dk/xydroid/ - 一個在 Android 手機上提供 Xymon 狀態的最新專案。

另請參閱

[編輯 | 編輯原始碼]
華夏公益教科書