使用expect登录批量拷贝本地文件到多个目标主机
- #!/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
使用expect登录批量拷贝本地文件到多个目标主机的更多相关文章
- 拷贝本地文件到docker容器
查找所有容器 docker ps -a 查找容器长ID docker inspect -f '{{.ID}}' python 拷贝本地文件到容器 docker cp 本地路径 容器长ID:容器路径
- scp拷贝本地文件到服务器
拷贝远程服务器的文件到本地:scp -r -P 端口号 用户名@IP地址:/usr/local/tomcat_airc/webapps/ /tmp/kyj/ 拷贝本地文件到远程服务 ...
- linux采用scp命令拷贝文件到本地,拷贝本地文件到远程服务器
// 假设远程服务器IP地址为 192.168.1.100 1.从服务器复制文件到本地: scp root@192.168.1.100:/data/test.txt /home/myfile/ roo ...
- php调接口批量同步本地文件到cos或者oss
代码: <?php namespace Main\Controller; use Common\Library\Vendor\ElasticSearch; use Common\Library\ ...
- 拷贝本地文件到docker容器内部
#复制本地目录的xxx到镜像内部并且为xxx docker cp /home/xxx targetImage:/home/xxx
- DOS批量拷贝本地目录到远程主机(定时执行)
echo !USER! net use \\!REMOTE_ADDR!\IPC$ /u:!USER! copy D:\batch\ip.bat \\!REMOTE_ADDR!\Admin$\ / ...
- 【HDFS API编程】从本地拷贝文件,从本地拷贝大文件,拷贝HDFS文件到本地
接着之前继续API操作的学习 CopyFromLocalFile: 顾名思义,从本地文件拷贝 /** * 使用Java API操作HDFS文件系统 * 关键点: * 1)create Configur ...
- php 批量进行复制文件
php 批量进行复制文件 1.前言 目标:php批量进行复制指定的目录文件夹下所有文件复制到另一个文件夹下 所使用的的php函数:is_dir,opendir,readdir,scandir,mkdi ...
- ssh采用expect实现自动输入密码登录、拷贝
1. 引言 最近做了一个项目,需要频繁与另一台主机进行文件的传输:中间想到了很多方式:FTP.samba.curl等,但是还是感觉scp最好用. SCP使用教程可参阅:http://www.jb51. ...
随机推荐
- Spirng 分层,增加数据访问对象层
到层关键注释 @Repository 对应的包 import org.springframework.stereotype.Repository;
- Docker 安装 Apache
查找Docker Hub上的httpd镜像 apache$ docker search httpd 拉取官方的镜像 docker pull httpd 使用apache镜像 创建目录apache,用于 ...
- js中的三目运算符详解
判断 javascript中的三目运算符用作判断时,基本语法为: expression ? sentence1 : sentence2 当expression的值为真时执行sentence1,否则执行 ...
- [转帖]Google Chrome 解决 “您的连接不是私密连接”
Google Chrome 解决 “您的连接不是私密连接” 和被毒霸劫持 自己搭建了 k8s的 dashboard 结果 chrome 最新版本的打不开了.. 百度了下 园友的解决方案很完美 这里面转 ...
- Oracle的查询-分组查询
--查询出每个部门的平均工资 select e.deptno,avg(e.sal) from emp e group by e.deptno; 分组查询中,出现在 group by 后面的原始列,才能 ...
- iostream重载__int128
Normal (Naive)写法,用 string(char* ) std::ostream& operator <<(std::ostream&out,const __i ...
- 回炉重铸系列之javaEE基础
这篇文章主要介绍 servlet filter listener interceptor 之 知识点.博文主要从 概念,生命周期,使命介绍其区别.详情如下: 概念 生命周期 使命 servlet ...
- 整体二分(模板一)静态区间第K大
#define IOS ios_base::sync_with_stdio(0); cin.tie(0); #include <cstdio>//sprintf islower isupp ...
- 用shell脚本安装MySQL-5.7.22-官方版本
Install_CentOS7_MySQL57_binary.sh #!/bin/bash MySQL_Package=mysql-5.7.22-linux-glibc2.12-x86_64.tar. ...
- VS2013 + Nunit 安装搭建
Nunit 官方给我提供了Nunit 3的四种安装方式 第一种 通过NuGet进行Full Nunit安装 第二种 通过NuGet进行轻量级 NunitLite 安装 第三种 通过Zip 压缩包下载安 ...