2012年5月27日 星期日

PHP-EXPECT SSH應用(TELNET)

使用expect可以簡單達到自動交互作用,之前都在SHELL底下工作,用排程完成相關作業。
最近使用PHP expect 移到WEB介面,可遠端利用WEB更輕鬆完成操作,搭配PHP語法更容控制整個程序,不用考慮SHELL下的權限問題。

底下範例:

使用SSH連至設備進行命作操作,針對MOTOROLA RFS 抓取線上無線使用者IP

<?php
ini_set("expect.timeout", 10);
ini_set("expect.loguser", "Off");
define("PASSWORD", 'password:');
define("YESNO", 'yes/no)?');  ##first once for ssh key
define("ENABLEMODE", '*>');
define("SHELL", '*#');
#EXP_EXACT ..
$stream = fopen("expect://ssh sshcmd@10.209.8.1", "r");
#$stream = expect_popen("ssh sshcmd@10.209.8.1");
$status=1;
while ($status) {
    switch (expect_expectl ($stream, array (
            array ('password:', 1 => PASSWORD),
            array ('yes/no)?', 1 => YESNO),
            array ('*>', 1 => ENABLEMODE),
            array ('*#', 1 => SHELL, EXP_EXACT)
           ),$result))
     {
        case @PASSWORD:
            fwrite ($stream, "password\n");
            break;
        case @YESNO:
            fwrite ($stream, "yes\n");
            break;
        case @ENABLEMODE:
            fwrite ($stream, "enable\n");
            break;
        case @SHELL:
            fwrite ($stream, "show wireless client \n        " );
            sleep(3);  ##wait output
            fwrite ($stream, "exit \n");
            break 2;
        case @EXP_TIMEOUT:
        case @EXP_EOF:
            $status=0;
            break 2;
        default:
            die ("Error has occurred!\n");
    }
}
## show messages
    $line = stream_get_contents($stream) ;
    fclose ($stream);
    print_r($line);
?>

部份PHP 就沒有貼上來,僅貼連結MoTo RFS7000控制部份。
主要PHP程式是控制,線上增加及刪除使用者裝置MAC,使用者自行登入註冊MAC,來MAC存取控管,原本要從RFS7000設備上手動命令設定,現在只要WEB介面讓使用者點點按鈕就可了。
 
 

@SHELL  顯示如果有多頁顯示時需要按任一鍵繼續換頁(強迫性),所以 \n 後面接幾個控白字元來換頁,同時也可能需要等待結果的輸出,在加上seleep(3),若未等待可能造成下一個指令無法正確執行。
在linux 上系統就比較不會發生這種問題,大都是一個命令就全部顯示,不需換行的動作。

@YESNO  是控制SSH第一次接收public key動作。



在 CentOS6 需要安裝pecl, 同時也要安裝 ssh2 , expect, 才能正常執行PHP_EXPECT
# pecl list
Installed packages, channel pecl.php.net:
=========================================
Package  Version State
expect   0.3.1   beta
ssh2     0.11.2  beta

沒有留言:

張貼留言

Extreme XOS run pyton scripts

XOS run python scripts v15.7 or high 將交換器上的 IP & MAC 往syslog 丟, 簡單將IP資料保留下 ## 編緝Scripts # vi ip2syslog.py #!/usr/bin/python # ...