utils/sshscp.sh

#! /bin/bash

exelocal=1

sshcmd_comm()
{
	#参数赋值,注意这里有加双引号
	srccommand="$1"
	descommand="$2"
	password="$3"
	r_option="$4"
	timeout=180
	#判断srccommand或者descommand 是否为null
	if [ "x$srccommand" = "x" -o "x$descommand" = "x" ]; then
		echo "wrong parameter"
		exit 1
	fi
	#这个地方应该是写错了吧,数字判断是否相等应该用==
	if [ $r_option = 1 ]; then
		r_option="-r"
	else
		r_option=""
	fi
	#通过expect 执行交互命令
	expect <<-END1
		set timeout -1
		spawn scp -o "ConnectTimeout ${timeout}" ${r_option} $srccommand $descommand
		expect {
			"Are you sure you want to continue connecting (yes/no)?" {
				send "yes\r"
				expect -re "\[P|p]assword:"
				send "${password}\r"
			}
			
			-re "\[P|p]assword:" {
				send "${password}\r"
			}
			timeout {
				send_user "connection to $targetip timed out: \$expect_out(buffer)\n"
				exit 13
			}
				
			eof {
			#捕获ssh 远程执行的命令的返回的结果
				catch wait result
				exit [lindex \$result 3]
			}
		}
		expect {
			eof {
                                catch wait result
                                exit [lindex \$result 3]
                        }
			
			-re "\[P|p]assword:" {
				send_user "invalid password or account. \$expect_out(buffer)\n"
				exit 13
			}
			
			timeout {
				send_user "connection to $targetip time out: \$expect_out(buffer)\n"
				exit 13
			}
		}
	END1
	return $?
}

usage()
{
	echo "Usage: sshscp.sh -s "src" -d "des" [-p login_password] [-r]"
}

delete_known_hosts()
{
#往known_hosts 中写空文件的方式来删除
	known_hosts=/root/.ssh/known_hosts
        sudo > ${known_hosts}
}

src=
des=
loginpassword=
r_option=0
#parse 调用这个脚本时的可选参数
while getopts "u:p:s:d:hr" OPTIONS
do
	case $OPTIONS in
		p) loginpassword="$OPTARG";;
		s) src="$OPTARG";;
		d) des="$OPTARG";;
		r) r_option=1;;
		h) usage;exit 1;;
		\?) echo "ERROR - Invalid Parameter"; echo "ERROR - Invalid parameter" >&2; usage; exit 1;;
		*) echo "ERROR - Invalid Parameter"; echo "ERROR - Invalid parameter" >&2; usage; exit 1;;
	esac
done
#判断字符串是否为null
if [ "x$src" = "x" -o "x$des" = "x" ]; then
	echo "$src  $des"
	usage
	exit 1
fi
#方式ssh 时失败,因此提示清空/root/.ssh/known_hosts 文件
delete_known_hosts
#调用前面的定义的函数,执行scp 命令
sshcmd_comm "$src" "$des" "$loginpassword" "${r_option}"
#返回sshcmd_comm 执行的结果
exit $?

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值