#!/bin/sh #------------------------------------------------------------------------------ # 功能: ssh方式執行 遠程腳本 驅動插件程序 # 參數: # 1. progname 和sh做業相似,對應相應任務的progname屬性,通常爲腳本的全路徑名稱 # 2. para 和sh做業相似,對應相應任務的para屬性,通常爲腳本的入口參數,格式爲 para1 para2 ... # 3. exppara 對應相應任務的exppara屬性,通常爲腳本文件所在位置,在這裏是遠程鏈接IP地址和用戶名 # sip=172.22.1.1 ssh遠程IP地址 # sport=9527 ssh遠程鏈接端口 # suser=taskctl ssh遠程用戶 # 返回值: 0 成功;1 失敗 # # 流程模式代碼任務定義舉例: # 默認2個輸入參數的遠程服務器上的sh腳本(若是多個,以此類推) # <ssh> # <name>job1</name> # <progname>/home/username/test.sh</progname> # <para>para1 para2</para> # <exppara>sip=172.22.1.1,[sport=22,]suser=taskctl</exppara> # </ssh> # #------------------------------------------------------------------------------ if [ $ # -ne 3 ] then echo "Param error !" echo "Usage: $0 progname para expara" exit 126 fi #------------------------------------------------------------------------------ # 第一步: 接收參數 #------------------------------------------------------------------------------ ProgName=$1 Para=$2 ExpPara=$3 #------------------------------------------------------------------------------ # 第二步: 解析 exppara #------------------------------------------------------------------------------ function getValue(){ if [ $ # -ne 2 ] then echo "......." exit 1 fi str=` echo $2| awk - v record=$1 'BEGIN { split (record,myarray, "," ); } END{ for (i in myarray){ if (myarray[i]~$1){ if ( index(myarray[i],$1) == 1){ print myarray[i]; break ; } } } } '` echo $str| awk -F "=" '{print $2}' } ExpPara=` echo $ExpPara` #此處爲了去先後空格,以便判斷是否真正有入口參數 sip=`getValue $ExpPara sip` #sport=`getValue $ExpPara sport` #默認沒有修改端口 傳參數的時候也沒有傳 先屏蔽 sport=22 suser=`getValue $ExpPara suser` #------------------------------------------------------------------------------ # 第三步: 檢測是否配置了ssh免密鏈接 #------------------------------------------------------------------------------ ssh -o NumberOfPasswordPrompts=0 -o StrictHostKeyChecking=no -p $sport $suser@$sip 'pwd' &> /dev/null if [ $? != 0 ]; then echo -e "\n沒法鏈接到$sip" echo -e "\n能夠參照下面的語句嘗試配置免密鏈接" echo -e "\nssh-keygen -t rsa -P ''" echo -e "\nssh-copy-id -p $sport $suser@$sip" exit 1 else echo -e "\n$sip :ssh connect is OK" fi #------------------------------------------------------------------------------ # 第四步: 運行JOB,並等待結果 #------------------------------------------------------------------------------ #echo "ssh -o NumberOfPasswordPrompts=0 -o StrictHostKeyChecking=no -p $sport $suser@$sip sh $ProgName $Para" #此處爲打印執行命令行,以便調試判斷是否真正有入口參數 echo "================================================================================" ssh -o NumberOfPasswordPrompts=0 -o StrictHostKeyChecking=no -p $sport $suser@$sip "sh $ProgName $Para" ret=$? #------------------------------------------------------------------------------ # 第五步: 插件返回 #------------------------------------------------------------------------------ echo "================================================================================" if [[ $ret == 0 ]]; then echo "Run job success !" exit 0 else echo "Run job failed !" exit 1 fi |