#!/bin/sh
#------------------------------------------------------------------------------
#	功能: [ssh方式]执行[远程] scp 驱动插件程序
#	参数: 
#	     1. progname   任意值，无实际意义，但是为了配合流程代码整体风格 不能为空
#	     2. para       
#						port=9527          ssh远程连接端口
#						suser=taskctl      源用户(ssh远程用户)
#						sip=172.22.1.1     源IP(ssh远程IP地址)
#						spath=$HOME/mydata/ 源文件目录
#						sfile=b.ss         源文件名
#						duser=taskctl      put目标用户
#						dip=172.22.1.1     put目标IP
#						dpath=$HOME/mydata/ 目标文件目录
#						dfile=a.ss         目标文件名(可以为空,为空时保持源文件名)
#	     3. exppara    空
#	返回值: 脚本执行后的实际返回值
#	
#	流程模式代码任务定义举例:
#	1、当前节点安装用户拷贝文件到远程主机(当前用户和远程主机用户做了ssh免密)
#	<scp>
#		<name>job1</name>
#		<progname>job1</progname>
#		<para>spath=/home/em/,sfile=a.txt,duser=cdchen,dip=47.94.203.124,dpath=/home/cdchen/[,dfile=test.txt]</para>
#	</scp>
#	2、远程主机拷贝文件到当前节点安装用户(当前用户和远程主机用户做了ssh免密)
#	<scp>
#		<name>job1</name>
#		<progname>job1</progname>
#		<para>suser=cdchen,sip=47.94.203.124,spath=/home/cdchen/,sfile=test.sh,dpath=/home/em/[,dfile=test.txt]</para>
#	</scp>
#
#------------------------------------------------------------------------------

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}'
}

Para=`echo $Para`    #此处为了去前后空格,以便判断是否真正有入口参数
if [ ! -n "$Para" ] 
then
    echo "Para error !"
    echo "Para is not NULL"
    exit 126
fi
#port=`getValue $Para port` #默认没有修改端口 传参数的时候也没有传 先屏蔽
port=22

suser=`getValue $Para suser`
sip=`getValue $Para sip`
spath=`getValue $Para spath`
sfile=`getValue $Para sfile`
duser=`getValue $Para duser`
dip=`getValue $Para dip`
dpath=`getValue $Para dpath`
dfile=`getValue $Para dfile`

#------------------------------------------------------------------------------
#      第三步： 检测是否配置了ssh免密连接
#------------------------------------------------------------------------------
ssh -o ConnectTimeout=5 -o NumberOfPasswordPrompts=0 -o StrictHostKeyChecking=no -p $port ${suser}${duser}@${sip}${dip} 'pwd' &>/dev/null
if [ $? != 0 ];then
	echo -e "\nSSH Connection failed ${sip}${dip}"
	echo -e "\nssh-keygen -t rsa -P ''"
	echo -e "\nssh-copy-id -p $port ${suser}@${sip} ${duser}@{$dip} "
	exit 1
else
	echo -e "\nSSH connection succeeded ${sip}${dip}"
fi

#------------------------------------------------------------------------------
#      第四步： 参数处理
#------------------------------------------------------------------------------ 
if [  -n "$sip" ] 
then
	sip="@"${sip}":"
fi
if [  -n "$dip" ] 
then
	dip="@"${dip}":"
fi

#------------------------------------------------------------------------------
#      第五步： 运行JOB，并返回结果
#------------------------------------------------------------------------------ 
#此处为打印执行命令行,以便调试判断是否真正有入口参数
echo "scp -o NumberOfPasswordPrompts=0 -o StrictHostKeyChecking=no -P $port ${suser}${sip}${spath}${sfile} ${duser}${dip}${dpath}${dfile}"
scp -o NumberOfPasswordPrompts=0 -o StrictHostKeyChecking=no -P $port ${suser}${sip}${spath}${sfile} ${duser}${dip}${dpath}${dfile}
ret=$?
exit $ret