Linux 利用 expect 进行 scp 自动同步文件

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

expect安装服务器

# yum install expect
(1/2): tcl-8.5.13-8.el7.x86_64.rpm
(2/2): expect-5.45-14.el7_1.x86_64.rpm

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

关于 expect 的使用能够参考:http://blog.csdn.NET/catoop/article/details/48289991 下面附上2个脚本:oop

一、进行文件同步的脚本,文件名 expect_scp测试

#!/usr/bin/expect  
set timeout 3600  
set host [lindex $argv 0]  
set port [lindex $argv 1]  
set username [lindex $argv 2]  
set password [lindex $argv 3]  
set src_file [lindex $argv 4]  
set dest_file [lindex $argv 5]  
#spawn scp $src_file $username@$host:$dest_file  
spawn scp -P $port -r $username@$host:$src_file $dest_file  
expect {  
 "(yes/no)?" {  
   send "yes\n"  
   expect "*assword:" { send "$password\n"}  
  }  
  "*assword:" {  
   send "$password\n"  
  }  
}  
expect "100%"  
expect eof

二、执行本机操做的 shell 脚本,文件名 deploy.shui

#!/bin/sh  
  
src_dir=/data/huiyzl/runtime/  
dest_dir=/data/huiyzl/  
host=219.135.214.146  
port=60203  
username=root  
password=LENOVOap123  
  
# 目录不存在,则建立,若是存在先删除再建立  
if [ ! -d $src_dir ]; then  
  mkdir -p $src_dir  
else  
  rm -rf $src_dir  
  mkdir -p $src_dir  
fi  
  
# 将远程服务器上的文件拷贝到本机  
./expect_scp $host $port $username $password $src_dir $dest_dir  
  
echo "end"

deploy.sh 为何能够直接执行的脚本,内部调用 expect_scp 为专门用来拉取远程服务器上文件的脚本。spa

PS:本例的原来用意是作自动化部署用的,测试环境的代码在测试服务器上,该deploy.sh 脚本为正式环境,当测试环境测试经过后,正式环境经过执行 deploy.sh 就能够进行相关内容的同步并进行自动中止和重启服务,完成正式环境的自动化部署。这个脚本,咱们能够在别的服务器上或者经过部署平台进行调用执行。code

相关文章
相关标签/搜索