• <ruby id="5koa6"></ruby>
    <ruby id="5koa6"><option id="5koa6"><thead id="5koa6"></thead></option></ruby>

    <progress id="5koa6"></progress>

  • <strong id="5koa6"></strong>
  • 用QQ管理你的系統

    發表于:2007-07-04來源:作者:點擊數: 標簽:
    http://bbs.chinaunix.net/forum/4/050724/582500.html 用QQ管理你的系統 2005-7-24 by wwy ######################### 看過abel大哥的帖子--Shell/Web下發送MSN Message 很受啟發 http://bbs.chinaunix.net/forum/24/050711/575520.html 是利用一個基于命令
    http://bbs.chinaunix.net/forum/4/050724/582500.html

    用QQ管理你的系統
    2005-7-24 by wwy
    #########################

    看過abel大哥的帖子--Shell/Web下發送MSN Message 很受啟發
    http://bbs.chinaunix.net/forum/24/050711/575520.html
    是利用一個基于命令行的msn客戶端實現的
    在這里,換個角度,同樣可以利用Linux下命令行QQ客戶端 --- TestQQ來實現對系統的管理
    管理員通過自己的QQ與服務端的QQ進行交流,服務器后臺用TestQQ+expect+bash 就可以實現很多有趣的功能了

    TestQQ下載地址:http://formalin14.org/blog/static.php?page=tq
    還要有兩個OICQ號碼,并互相加為好友(一個放在服務端,一個在管理員端)
    關于TestQQ的使用方法在
    http://formalin14.org 有說明,
    其中在配置文件config.ini 中設置好掛在服務端的QQ號,密碼和是否隱身等信息

    實現起來可以有兩種考慮,
    第一種是以shell腳本為主,即讓shell腳本在系統后臺監控,當滿足一些條件時,調用expect腳本來控制TestQQ,向管理員發特定的消息,發完以后,服務端的QQ就退出;
    比如,1.sh腳本用于檢測系統的登陸人數,當登陸人數大于0時,調用1.exp腳本,將who命令的結果發給管理員的QQ

    簡單的舉例:

    代碼:

    #!/bin/bash
    #flie_name 1.sh
    if [ `who | wc -l` -gt 0 ];then
       ./1.exp   #同目錄下的exp腳本
    fi


    代碼:

    #!/usr/bin/expect
    #file_name 1.exp
    set QQnum 165165984  #管理員端的QQ號
    set run /home/wwy/TextQQ/TextQQ.sh #TextQQ的執行文件
    #-----------
    spawn $run
    sleep 1
    expect "*"
    sleep 3  #如果網速慢,可以加大這些sleep
    expect "*"
    sleep 3
    expect "*"
    sleep 3
    expect "*"
    sleep 5
    #-----------
    send "/msg $QQnum Ready_at_[exec date +%D--%R]\r"
    send "[exec who | xargs]\r" #who命令后用到了xargs,是因為TextQQ不支持換行的原因,在這里 "who | xargs" 可以換成其他腳本或命令,來實現更復雜的功能
    expect "*"
    expect eof

    將1.sh放到計劃任務里后,就可以等著來自服務端的消息了

    管理員端QQ的聊天紀錄舉例:
    代碼:

    Server 19:27:18
    Ready_at_07/24/05--19:27

    Server 19:27:18
    root pts/0 Jul 24 18:48 (cncln.online.ln.cn)



    第二種考慮是以expect腳本為主,就是將QQ一直掛在服務器后臺,一旦滿足某些條件,就執行shell腳本,因為expect能控制交互性
    這樣做就可以實現管理員向服務端QQ發消息,消息的內容為shell命令,系統做出反應,并將執行結果以QQ消息的形勢回復給管理員

    比如,2.sh腳本用于檢查msg.log,這是TextQQ聊天紀錄的存放文件,提取其中管理員最新說的話(即命令),執行并返回結果;

    例如:
    代碼:

    #!/bin/bash
    #file_name 2.sh
    msg_log=/home/wwy/TextQQ/msg.log #msg.log文件
    file=/home/wwy/TextQQ/my_msg_log.txt #存放聊天紀錄的文件
    QQnum=165165984 #管理員端的QQ號
    cmd=`cat msg.log | grep "\[" | tee -a $file | grep $QQnum | tail -1  | awk -F] '{print }'`
    #-----------------------
    if [ ! "$cmd" ];then
       :
    elif [ ! "`eval "$cmd" 2> /dev/null`" ];then
       echo 'sorry, your cmd is no display return.'
    elif [ : ];then
       eval "$cmd" | xargs
    fi
    #-----------------------
    > $msg_log #清空msg.log,被清空的內容事先保存在my_msg_log.txt 之中



    同時,2.exp文件用于將QQ掛在后臺,每隔幾秒檢查一下2.sh是否有結果返回,如果有將結果發給管理員
    代碼:

    #!/usr/bin/expect
    set QQnum 165165984 #管理員端的QQ號
    set shell_script /home/wwy/TextQQ/2.sh #2.sh文件的位置
    set run /home/wwy/TextQQ/TextQQ.sh
    #-----------
    spawn $run
    sleep 1
    expect "*"
    sleep 3
    expect "*"
    sleep 3
    expect "*"
    sleep 3
    expect "*"
    sleep 5
    #-----------
    send "/msg $QQnum Ready,waiting_your_cmd,at_[exec  date +%R--%D]\r"
    expect "*"
    sleep 1
    while {
       set r [exec $shell_script]
       if {
           send "$r\r"
           expect "*"
       }
       sleep 3  #內隔3秒檢查一次2.sh是否有返回結果
    }
    expect eof

    將2.exp放到后臺運行即可,等收到Server的“Ready,waiting_your_cmd...”這個消息后,就可以跟Server“聊命令了”
    代碼:

    ./2.exp &



    聊天紀錄舉例:
    代碼:

    Server 20:06:27
    Ready,waiting_your_cmd,at_20:06--07/24/05

    wwy 20:01:18
    pwd

    Server 20:07:09
    /home/wwy/TextQQ

    wwy 20:01:36
    ls

    Server 20:07:19
    1.exp 1.sh 2.exp 2.sh classes config.ini err.log jre jre_u lib msg.log my_msg_log.txt readme.txt setenv.bat textqq.bat TextQQ.sh

    wwy 20:01:54
    uptime

    Server 20:07:39
    20:07:39 up 6 days, 11:06, 1 user, load average: 0.00, 0.00, 0.00

    wwy 20:02:06
    touch tmp

    Server 20:07:59
    sorry, your cmd is no display return.  

    wwy 20:02:43
    ls tmp

    Server 20:08:29
    tmp

    wwy 20:10:24
    uname -a

    Server 20:16:10
    Linux Reinnat 2.4.21-4.ELsmp #1 SMP Fri Oct 3 17:52:56 EDT 2003 i686 i686 i386 GNU/Linux

    wwy 20:11:51
    iptables -L -n

    Server 20:17:40
    Chain INPUT (policy ACCEPT) target prot opt source destination DROP all -- 0.0.0.0/0 0.0.0.0/0 DROP tcp -- 0.0.0.0/0 0.0.0.0/0 tcp dpts:135:139 DROP udp -- 0.0.0.0/0 0.0.0.0/0 udp dpts:135:139 DROP tcp -- 0.0.0.0/0 0.0.0.0/0 tcp dpts:1433:1434 DROP udp -- 0.0.0.0/0 0.0.0.0/0 udp dpts:1433:1434 Chain FORWARD (policy ACCEPT) target prot opt source destination DROP tcp -- 0.0.0.0/0 0.0.0.0/0 tcp dpts:135:139 DROP udp -- 0.0.0.0/0 0.0.0.0/0 udp dpts:135:139 DROP tcp -- 0.0.0.0/0 0.0.0.0/0 tcp dpts:1433:1434 DROP udp -- 0.0.0.0/0 0.0.0.0/0 udp dpts:1433:1434 DROP icmp -- 0.0.0.0/0 0.0.0.0/0 Chain OUTPUT (policy ACCEPT) target prot opt source destination

    wwy 20:17:56
    sar 1 1 | sed -n '4p'

    Server 20:23:53
    08:23:53 PM all 0.00 0.00 0.00 3.55 96.45


    因為在下expect用的太差,而TextQQ本身也有很多局限性,所以有很多不完善的地方,比如只能顯示單行和非交互式命令的結果,像more,top這樣的命令使用起來會出問題,不過,如果不要回顯,一般單行命令都會執行,如rm,iptables等...
    關于安全方面,權限就是運行TextQQ時的權限,因為在腳本里有過濾,所以也不用擔心別人可以控制服務端的QQ,當然,自己的QQ被盜了除外

    原文轉自:http://www.kjueaiud.com

    老湿亚洲永久精品ww47香蕉图片_日韩欧美中文字幕北美法律_国产AV永久无码天堂影院_久久婷婷综合色丁香五月

  • <ruby id="5koa6"></ruby>
    <ruby id="5koa6"><option id="5koa6"><thead id="5koa6"></thead></option></ruby>

    <progress id="5koa6"></progress>

  • <strong id="5koa6"></strong>