Linux 利用 expect 进行 scp 自动同步文件
http://www.zftb.cn  发布时间:2016-03-25 15:09 来源:未知 浏览:加载中

现在有一个这样的需求:

执行一个脚本,自动从指定服务器上全量拉取指定目录的文件,远程服务器的用户名、端口、密码、目录配置在执行的shell脚本中。

 

要实现这样的需求,我们使用scp 来实现,但是scp 在执行的过程中需要输入密码,所以我们就需要用到一个工具 “expect” 来实现自动化脚本。

关于 expect 的使用可以参考:http://www.zftb.cn/czxt/linux/2016/0325/1473.html

 

下面附上2个脚本:

1、进行文件同步的脚本,文件名 expect_scp

 

[html] view plain copy
 
  1. #!/usr/bin/expect  
  2. set timeout 3600  
  3. set host [lindex $argv 0]  
  4. set port [lindex $argv 1]  
  5. set username [lindex $argv 2]  
  6. set password [lindex $argv 3]  
  7. set src_file [lindex $argv 4]  
  8. set dest_file [lindex $argv 5]  
  9. #spawn scp $src_file $username@$host:$dest_file  
  10. spawn scp -P $port -r $username@$host:$src_file $dest_file  
  11. expect {  
  12.  "(yes/no)?" {  
  13.    send "yes\n"  
  14.    expect "*assword:" { send "$password\n"}  
  15.   }  
  16.   "*assword:" {  
  17.    send "$password\n"  
  18.   }  
  19. }  
  20. expect "100%"  
  21. expect eof  

2、执行本机操作的 shell 脚本,文件名 deploy.sh

 

 

[html] view plain copy
 
  1. #!/bin/sh  
  2.   
  3. src_dir=/data/huiyzl/runtime/  
  4. dest_dir=/data/huiyzl/  
  5. host=219.135.214.146  
  6. port=60203  
  7. username=root  
  8. password=LENOVOap123  
  9.   
  10. # 目录不存在,则创建,如果存在先删除再创建  
  11. if [ ! -d $src_dir ]; then  
  12.   mkdir -p $src_dir  
  13. else  
  14.   rm -rf $src_dir  
  15.   mkdir -p $src_dir  
  16. fi  
  17.   
  18. # 将远程服务器上的文件拷贝到本机  
  19. ./expect_scp $host $port $username $password $src_dir $dest_dir  
  20.   
  21. echo "end"  

deploy.sh 为什么可以直接执行的脚本,内部调用 expect_scp 为专门用来拉取远程服务器上文件的脚本。

 

脚本比较简单,就不逐行介绍了。

----------------------------------------------

PS:本例的原来用意是做自动化部署用的,测试环境的代码在测试服务器上,该deploy.sh 脚本为正式环境,当测试环境测试通过后,正式环境通过执行 deploy.sh 就可以进行相关内容的同步并进行自动停止和重启服务,完成正式环境的自动化部署。

这个脚本,我们可以在别的服务器上或者通过部署平台进行调用执行。

如果你有好的win10资讯或者win10教程,以及win10相关的问题想要获得win10系统下载的关注与报道。
欢迎加入发送邮件到657025171#qq.com(#替换为@)。期待你的好消息!