1. #!/bin/bash
  2. #
  3. #********************************************************************
  4. #encoding -*-utf8-*-
  5. #Author: zhangshang
  6. #Date: 2017-12-26
  7. #URL: http://blog.vservices.top/myblog
  8. #Description: The test script
  9. #Copyright (C): 2017 All rights reserved
  10. #QQ Numbers: 765030447
  11. #********************************************************************
  12. usage(){
  13. echo '这个脚本是用批量拷贝本地文件到多个远程目标主机的指定目录下。
  14. 需要事先将主机的ip和密码存入该脚本当前目录下的scp_host文件中,如果没有这个文件,请创建。账号密码放在同一行,使用"::"进行分割,例 127.0.0.1::123
  15. 位置参数$1 表示用户名
  16. 位置参数$2 表示本地文件或目录
  17. 位置参数$3 表示远程主机的目录
  18. 三个位置参数缺一不可,执行方式,例:
  19. sh scp_localfiletodist.sh root /etc/fstab /root/'
  20. }
  21. #参数不为3退出脚本
  22. [ $# -ne 3 ] && usage && exit 1
  23. [ `rpm -qa expect | wc -l` -eq 0 ] && { echo "请安装expect脚本的rpm包" ; exit 1; }
  24. #遍历主机和密码文件执行scp操作
  25. for i in `cat ./scp_host`;do
  26. ip=`echo $i | awk -F '::' '{print $1}'`
  27. passwd=`echo $i | awk -F '::' '{print $2}' | tr -d '\n'`
  28. #判断传入的参数是否为一个有效的ip地址
  29. [[ "$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; }
  30. count=`ping -c1 $ip | grep '1 received' | wc -l`
  31. #判断主机是否可达
  32. [ "$count" -eq 1 ] && echo -e "到$ip \033[32m主机可达\033[0m" || { echo -e "到$ip \033[31m主机不可达\033[0m" && echo $ip >>./Unreachable.ip && continue; }
  33. #使用expect脚本,实现免交互式操作
  34. expect <<EOF
  35. spawn scp -r $2 $1@$ip:/$3
  36. expect {
  37. "(yes/no)?" { send "yes\n";exp_continue }
  38. "password" { send "$passwd\n" }
  39. }
  40. expect eof
  41. EOF
  42. done

使用expect登录批量拷贝本地文件到多个目标主机的更多相关文章

  1. 拷贝本地文件到docker容器

    查找所有容器 docker ps -a 查找容器长ID docker inspect -f '{{.ID}}' python 拷贝本地文件到容器 docker cp 本地路径 容器长ID:容器路径

  2. scp拷贝本地文件到服务器

    拷贝远程服务器的文件到本地:scp -r -P  端口号   用户名@IP地址:/usr/local/tomcat_airc/webapps/        /tmp/kyj/ 拷贝本地文件到远程服务 ...

  3. linux采用scp命令拷贝文件到本地,拷贝本地文件到远程服务器

    // 假设远程服务器IP地址为 192.168.1.100 1.从服务器复制文件到本地: scp root@192.168.1.100:/data/test.txt /home/myfile/ roo ...

  4. php调接口批量同步本地文件到cos或者oss

    代码: <?php namespace Main\Controller; use Common\Library\Vendor\ElasticSearch; use Common\Library\ ...

  5. 拷贝本地文件到docker容器内部

    #复制本地目录的xxx到镜像内部并且为xxx docker cp /home/xxx targetImage:/home/xxx

  6. DOS批量拷贝本地目录到远程主机(定时执行)

     echo !USER!  net use \\!REMOTE_ADDR!\IPC$ /u:!USER!  copy D:\batch\ip.bat \\!REMOTE_ADDR!\Admin$\ / ...

  7. 【HDFS API编程】从本地拷贝文件,从本地拷贝大文件,拷贝HDFS文件到本地

    接着之前继续API操作的学习 CopyFromLocalFile: 顾名思义,从本地文件拷贝 /** * 使用Java API操作HDFS文件系统 * 关键点: * 1)create Configur ...

  8. php 批量进行复制文件

    php 批量进行复制文件 1.前言 目标:php批量进行复制指定的目录文件夹下所有文件复制到另一个文件夹下 所使用的的php函数:is_dir,opendir,readdir,scandir,mkdi ...

  9. ssh采用expect实现自动输入密码登录、拷贝

    1. 引言 最近做了一个项目,需要频繁与另一台主机进行文件的传输:中间想到了很多方式:FTP.samba.curl等,但是还是感觉scp最好用. SCP使用教程可参阅:http://www.jb51. ...

随机推荐

  1. 最新 携程java校招面经 (含整理过的面试题大全)

    从6月到10月,经过4个月努力和坚持,自己有幸拿到了网易雷火.京东.去哪儿.携程等10家互联网公司的校招Offer,因为某些自身原因最终选择了携程.6.7月主要是做系统复习.项目复盘.LeetCode ...

  2. 【Cisco】实现同一个路由器一个端口用动态路由,另一个端口用静态路由

    一.先构建以下网络图: 准备三台路由器,三台交换机,三台主机,连接所有设备并配置端口IP和网关,DCE端口的时钟频率都设置为64000.

  3. 微信小程序的calc不生效处理

    大致文字初略的记录描述一下问题:外层是relative相对定位,内部一个view 需要绝对定位bottom的值为128rpx,同时还要兼容适配苹果x的底部,所以值是这样设置的: bottom: cal ...

  4. Oracle数据库连接工具的使用(一)

    一.企业管理器(OEM) 1.介绍 Oracle企业管理器(Oracle Enterprise Manager)简称OEM,是一个基于Java的框架系统,该系统集成了多个组件,为用户提供了一个功能强大 ...

  5. Shell脚本之流程控制(if、for、while)

    if 判断 if语句的三种格式: (1)if (2)if else (3)if elif else 语法格式如下: #if 语法格式 if 条件 then 命令1... 命令2... fi #if e ...

  6. POJ3046ANT_COUNTING

    #include <iostream> #include <cstdio> #include <cstdlib> #include <cstring> ...

  7. LC 394. Decode String

    问题描述 Given an encoded string, return its decoded string. The encoding rule is: k[encoded_string], wh ...

  8. Python可修改和不可修改类型变量(mutuable and immutuable)

    通俗的讲,可修改可以理解为可以在数据所在内存地址直接修改,而不可修改则意味着一旦修改便是创建新的数据对象,而不是在原来的对象内存地址修改 1,Mutuable object [sourcecode l ...

  9. IDEA中安装go插件,如何能够配置go SDK?

    最近在学习go语言,一个是因为区块链的技术热潮,另一个是接手的项目有用到go写多线程高并发,因此决定自学go. 第一个遇到的问题就是环境! 通过一个晚上的摸索,大概步骤如下: 在IDEA中先打开set ...

  10. UML学习(四)-----状态图

    状态图主要用于描述对象具有的各种状态.状态之间的转换过程以及触发状态转换的各种事件和条件. 1.状态图的组成 1.1 状态 主要用于描述一个对象在生命周期内的一个时间段.状态图中的状态包括状态名.内部 ...