Shell 脚本实现scp 自动化交互

Linux  shell 命令scp 可以实现远程拷贝文件,但是需要人工进行交互,无法使用shell 脚本进行自动化的方式来实现,如果能自动化实现呢? 今天我们来解决这个问题。
 
1、 expect是一个自动交互功能的工具。expect是开了一个子进程,通过spawn来执行shell脚本,监测到脚本的返回结果,通过expect判断要进行的交互输入内容(send),以chat的方式解决了交互的问题。
 
C1CC1CF7-B617-45dd-BDB2-A55EEB216A35.png


2、默认情况下centos 没有安装,可以通过yum 来进行安装,具体命令为:yum install expect  截图如下:

QQ截图20180808163745.png


3、 验证一下是否安装expect成功,截图如下

QQ截图20180808164710.png


4、举例来说明expect的格式命令和具体的方法
 
step1: 创建一个后缀名为.exp的文件,scp.exp ,具体代码如下
 
#!/usr/bin/expect -f
set timeout 10

set host [lindex $argv 0]
set username [lindex $argv 1]
set password [lindex $argv 2]
set src_file [lindex $argv 3]
set dest_file [lindex $argv 4]

#这里的 set 使用来定义位置变量的,执行脚本的时候传入位置变量
spawn scp -r $src_file $username@$host:/tmp/$dest_file
expect {
"(yes/no)?" {
send "yes\n"
expect "*assword:" { send "$password\n" }
}
"*assword:" {
send "$password\n"
}
}


expect "100%"
expect eof:


5 执行过程,
 
step1: 脚本的赋值执行权限,chmod +x scp.exp
 
step2: ./scp.exp 192.168.3.129 root 123456 1.txt 1.txt
 

QQ截图20180808170100.png

 
 

0 个评论

要回复文章请先登录注册