expect自动远程拷贝脚本,利用rsync命令,脚本内容如下:

#!/usr/bin/expect --

proc Usage_Exit {self} {
puts ""
puts "Usage: $self ip user passwd port sourcefile destdir direction bwlimit timeout"
puts ""
puts " sourcefile: a file or directory to be transferred"
puts " 需要拷贝目录时目录名后不要带 /, 否则会拷贝该目录下的所有文件"
puts " destdir: the location that the sourcefile to be put into"
puts " direction: pull or push"
puts " pull: remote -> local"
puts " push: local -> remote"
puts " bwlimit: bandwidth limit, kbit/s, 0 means no limit"
puts " timeout: timeout of expect, s, -1 means no timeout"
puts ""
exit 1
} if { [llength $argv] < 9 } {
Usage_Exit $argv0
} set ip [lindex $argv 0]
set user [lindex $argv 1]
set passwd [lindex $argv 2]
set port [lindex $argv 3]
set sourcefile [lindex $argv 4]
set destdir [lindex $argv 5]
set direction [lindex $argv 6]
set bwlimit [lindex $argv 7]
set timeoutflag [lindex $argv 8] set yesnoflag 0
set timeout $timeoutflag for {} {1} {} {
# for is only used to retry when "Interrupted system call" occured if { $direction == "pull" } { if { $bwlimit > 0 } {
spawn rsync -crazP --bwlimit=$bwlimit -e "/usr/bin/ssh -q -l$user -p$port" $ip:$sourcefile $destdir
} elseif { $bwlimit == 0 } {
spawn rsync -crazP -e "/usr/bin/ssh -q -l$user -p$port" $ip:$sourcefile $destdir
} else {
Usage_Exit $argv0
} } elseif { $direction == "push" } { if { $bwlimit > 0 } {
spawn rsync -crazP --bwlimit=$bwlimit -e "/usr/bin/ssh -q -l$user -p$port" $sourcefile $ip:$destdir
} elseif { $bwlimit == 0 } {
spawn rsync -crazP -e "/usr/bin/ssh -q -l$user -p$port" $sourcefile $ip:$destdir
} else {
Usage_Exit $argv0
} } else {
Usage_Exit $argv0
} expect { "assword:" {
send "$passwd\r"
break;
} "yes/no)?" {
set yesnoflag 1
send "yes\r"
break;
} "FATAL" {
puts "\nCONNECTERROR: $ip occur FATAL ERROR!!!\n"
exit 1
} timeout {
puts "\nCONNECTERROR: $ip Logon timeout!!!\n"
exit 1
} "No route to host" {
puts "\nCONNECTERROR: $ip No route to host!!!\n"
exit 1
} "Connection Refused" {
puts "\nCONNECTERROR: $ip Connection Refused!!!\n"
exit 1
} "Connection refused" {
puts "\nCONNECTERROR: $ip Connection Refused!!!\n"
exit 1
} "Host key verification failed" {
puts "\nCONNECTERROR: $ip Host key verification failed!!!\n"
exit 1
} "Illegal host key" {
puts "\nCONNECTERROR: $ip Illegal host key!!!\n"
exit 1
} "Connection Timed Out" {
puts "\nCONNECTERROR: $ip Logon timeout!!!\n"
exit 1
} "Interrupted system call" {
puts "\n$ip Interrupted system call!!!\n"
}
} } if { $yesnoflag == 1 } {
expect {
"assword:" {
send "$passwd\r"
} "yes/no)?" {
set yesnoflag 2
send "yes\r"
}
}
} if { $yesnoflag == 2 } {
expect {
"assword:" {
send "$passwd\r"
}
}
} expect {
"assword:" {
send "$passwd\r"
puts "\nPASSWORDERROR: $ip Password error!!!\n"
exit 1
} eof {
puts "OK_SCP: $ip\n"
exit 0;
}
}

用法:

./scp.exp

Usage: ./scp.exp ip user passwd port sourcefile destdir direction bwlimit timeout

       sourcefile: a file or directory to be transferred
需要拷贝目录时目录名后不要带 /, 否则会拷贝该目录下的所有文件
destdir: the location that the sourcefile to be put into
direction: pull or push
pull: remote -> local
push: local -> remote
bwlimit: bandwidth limit, kbit/s, 0 means no limit
timeout: timeout of expect, s, -1 means no timeout

expect自动远程拷贝脚本的更多相关文章

  1. CentOS 通过 expect 批量远程执行脚本和命令

    我们有时可能会批量去操作服务器,比如批量在服务器上上传某个文件,安装软件,执行某个命令和脚本,重启服务,重启服务器等,如果人工去一台台操作的话会特别繁琐,并浪费人力. 这时我们可以使用expect,向 ...

  2. Linux centosVMware运行告警系统、分发系统-expect讲解、自动远程登录后,执行命令并退出、expect脚本传递参数、expect脚本同步文件、指定host和要同步的文件、shell项目-分发系统-构建文件分发系统、分发系统-命令批量执行

    一运行告警系统 创建一个任务计划crontab -e 每一分钟都执行一次 调试时把主脚本里边log先注释掉 再次执行 没有发现502文件说明执行成功了,每日有错误,本机IP 负载不高 二.分发系统-e ...

  3. centos shell编程4【分发系统】 服务器标准化 mkpasswd 生成密码的工具 expect讲解 expect传递参数 expect自动同步文件 expect指定host和要同步的文件 expect文件分发系统 expect自动发送密钥脚本 Linux脚本执行方式 第三十八节课

    centos shell编程4[分发系统] 服务器标准化  mkpasswd 生成密码的工具  expect讲解   expect传递参数   expect自动同步文件  expect指定host和要 ...

  4. 使用expect实现自动交互,shell命令行自动输入,脚本自动化,变量引用,expect spawn执行带引号命令,expect 变量为空,不生效,不能匹配通配符*,函数,数组

    背景 有需求,在允许命令或者脚本跳出交互行,需要进行内容输入,但需要人手动输入,不是很方便,此时可以通过expect来实现自动互动交互. expect是一个自动交互功能的工具,可以满足代替我们实际工作 ...

  5. Linux centosVMware 自动化运维Ansible介绍、Ansible安装、远程执行命令、拷贝文件或者目录、远程执行脚本、管理任务计划、安装rpm包/管理服务、 playbook的使用、 playbook中的循环、 playbook中的条件判断、 playbook中的handlers、playbook实战-nginx安装、管理配置文件

    一.Ansible介绍 不需要安装客户端,通过sshd去通信 基于模块工作,模块可以由任何语言开发 不仅支持命令行使用模块,也支持编写yaml格式的playbook,易于编写和阅读 安装十分简单,ce ...

  6. centos记录uptime,tomcat日志切割,远程拷贝日志脚本

    1.uptime日志脚本(每天记录) #!/bin/sh dir=/tmp/uptime_log process=`ps -ef|grep $|grep -v "grep" |gr ...

  7. 使用expect实现自动登录的脚本

    使用expect实现自动登录的脚本,网上有很多,可是都没有一个明白的说明,初学者一般都是照抄.收藏.可是为什么要这么写却不知其然.本文用一个最短的例子说明脚本的原理. 脚本代码如下: ######## ...

  8. expect实现远程主机自动执行命令脚本

    2014年第一个脚本,哈哈!!! expect实现远程主机自动执行命令脚本: #!/usr/bin/expect -- if { [llength $argv] < 4 } { puts &qu ...

  9. shell脚本--expect自动应答

    expect自动应答  TCL语言 需求1:远程登录到A主机,什么事情也不做 #! /usr/bin/env expect # 开启一个程序 spawn ssh root@192.144.213.11 ...

随机推荐

  1. 代码编译时JDK版本和运行时JDK版本不一致启动项目报错

    java编译: java编译就是.java文件变成.class文件的过程,这个过程一般在我们常用的编译器中进行,例如Ecliplse和IDEA等:下面以IDEA举例: 执行上述编译使用的JDK版本就是 ...

  2. spring boot 整合saml2

    项目是国外的一位大神发布到githut上,这里只是对项目代码的分析与学习,也算是一种强化记忆 附上 githut地址:https://github.com/OpenConext/Mujina 项目分为 ...

  3. C#通用类库

    http://www.cnblogs.com/feiyangqingyun/archive/2010/12/20/1911630.html

  4. Jackson 数据类型转换

    转载自:http://www.cnblogs.com/quanyongan/archive/2013/04/16/3024993.html Jackson处理一般的JavaBean和Json之间的转换 ...

  5. frewalld假端口

    之前服务器没有开启firewalld,上面有lnmp.zabbix服务,后来开启了防火墙,发现端口都在,但是不能访问zabbix,后来用firewalld把端口重新开启.重新加载后才可以访问,这就是f ...

  6. 【FICO系列】SAP ABAP&FI FI/CO接口:待更新的不一致的FI/CO凭证标题数据

    公众号:SAP Technical 本文作者:matinal 原文出处:http://www.cnblogs.com/SAPmatinal/ 原文链接:[FICO系列]SAP ABAP&FI ...

  7. 应用安全 - 工具 | 平台 - Weblogic - 漏洞 - 汇总

    控制台路径 | 弱口令  前置条件 /console CVE-2016-0638  Date 类型远程代码执行 影响范围10.3.6, 12.1.2, 12.1.3, 12.2.1  CVE-2016 ...

  8. 解决172.17 或者172.18 机房环境下harbor服务器不通的问题

    直接改docker-compose.yml文件: 把原来的network选项注释掉,自定义 #networks: # harbor: # external: false networks: harbo ...

  9. hdu-4738.Caocao's Bridges(图中权值最小的桥)

    Caocao's Bridges Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) ...

  10. SQL Server之索引解析(二)

    1.堆表 堆表通过IAM连接一起,查询时全表扫描. 1.1 非聚集索引 结构 叶子节点数据结构:行数据结构+Rid(8字节) 中间节点数据结构: (非聚集非唯一索引)行数据结构+Page(4)+2+ ...