前面两篇博文中,为大家演示了shell脚本中su和ssh命令的免验证输入实现:
http://blog.csdn.net/hanlizhong85/article/details/74089997
http://blog.csdn.net/hanlizhong85/article/details/71055940
本文将进一步演示,通过expect工具实现scp命令免密输入的方法。
Expect开源软件安装,请参考:
http://blog.csdn.net/hanlizhong85/article/details/71038532
scp.sh脚本实现
脚本实现功能:实现远程主机与本地主机之间的文件拷贝,脚本有6个入参:
第1个参数:标识远端用户名;
第2个参数:标识远端用户名对应的密码;
第3个参数:远端主机IP地址;
第4个参数:源文件或目录;
第5个参数:目的文件或目录;
第6个参数:拷贝类型,0标识从远端拷贝数据到本地,为其他值标识从本地拷贝数据到远端。
############################################################
#!/bin/bash
#Createby hanlizhong on 2013.08.10
#The first three parameters represent remote host info.
USERNAME=$1
PASSWD=$2
HOSTIP=$3
SRC_FILE=$4
DST_FILE=$5
#TYPE:0--copy remote data to local; other--copy local data to remote
TYPE=$6
if [ -z${USERNAME} ] || [ -z ${PASSWD} ] || [ -z ${HOSTIP} ] ||\
[ -z ${SRC_FILE} ] || [ -z ${DST_FILE} ] || [-z ${TYPE} ]; then
echo "Input error!"
exit 1
fi
if [${TYPE} == 0 ]; then
#Here, ${SRC_FILE}must be absolute path.
CMD_PARA="${USERNAME}@${HOSTIP}:${SRC_FILE}${DST_FILE}"
else
#Here, ${DST_FILE}must be absolute path.
CMD_PARA="${SRC_FILE}${USERNAME}@${HOSTIP}:${DST_FILE}"
fi
expect -c"
spawn scp -r ${CMD_PARA}
expect {
"*\(yes/no\)?" {send "yes\\r"; exp_continue }
"*password:" { send"${PASSWD}\\r" }
}
expect eof
"
############################################################
执行结果:
[root@HLZhanlzh]# ./scp.sh root root "192.168.242.128""/home/hanlzh/log.txt" "/home" 0
spawn scp-r [email protected]:/home/hanlzh/log.txt /home
[email protected]'spassword:
log.txt 100% 0 0.0KB/s 00:00
[root@HLZhanlzh]#