#!/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 |