- #!/bin/bash
- #
- #********************************************************************
- #encoding -*-utf8-*-
- #Author: zhangshang
- #Date: 2017-12-26
- #URL: http://blog.vservices.top/myblog
- #Description: The test script
- #Copyright (C): 2017 All rights reserved
- #QQ Numbers: 765030447
- #********************************************************************
- usage(){
- echo '这个脚本是用批量拷贝本地文件到多个远程目标主机的指定目录下。
- 需要事先将主机的ip和密码存入该脚本当前目录下的scp_host文件中,如果没有这个文件,请创建。账号密码放在同一行,使用"::"进行分割,例 127.0.0.1::123
- 位置参数$1 表示用户名
- 位置参数$2 表示本地文件或目录
- 位置参数$3 表示远程主机的目录
- 三个位置参数缺一不可,执行方式,例:
- sh scp_localfiletodist.sh root /etc/fstab /root/'
- }
- #参数不为3退出脚本
- [ $# -ne 3 ] && usage && exit 1
- [ `rpm -qa expect | wc -l` -eq 0 ] && { echo "请安装expect脚本的rpm包" ; exit 1; }
- #遍历主机和密码文件执行scp操作
- for i in `cat ./scp_host`;do
- ip=`echo $i | awk -F '::' '{print $1}'`
- passwd=`echo $i | awk -F '::' '{print $2}' | tr -d '\n'`
- #判断传入的参数是否为一个有效的ip地址
- [[ "$ip" =~ ^(([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])\.){3}([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])$ ]] || { echo 'please input a valied ip' && echo $ip >>./Invalid.ip && continue; }
- count=`ping -c1 $ip | grep '1 received' | wc -l`
- #判断主机是否可达
- [ "$count" -eq 1 ] && echo -e "到$ip \033[32m主机可达\033[0m" || { echo -e "到$ip \033[31m主机不可达\033[0m" && echo $ip >>./Unreachable.ip && continue; }
- #使用expect脚本,实现免交互式操作
- expect <<EOF
- spawn scp -r $2 $1@$ip:/$3
- expect {
- "(yes/no)?" { send "yes\n";exp_continue }
- "password" { send "$passwd\n" }
- }
- expect eof
- EOF
- done
posted @
2018-02-28 13:23
莫孟林
阅读(
826)
评论()
编辑
收藏
举报