侧边栏壁纸
博主头像
落叶人生博主等级

走进秋风,寻找秋天的落叶

  • 累计撰写 130562 篇文章
  • 累计创建 28 个标签
  • 累计收到 9 条评论
标签搜索

目 录CONTENT

文章目录

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

2023-11-15 星期三 / 0 评论 / 0 点赞 / 53 阅读 / 2435 字

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

现在有一个这样的需求:执行一个脚本,自动从指定服务器上全量拉取指定目录的文件,远程服务器的用户名、端口、密码、目录配置在执行的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个脚本:

1、进行文件同步的脚本,文件名 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  

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

#!/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 为专门用来拉取远程服务器上文件的脚本。

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

广告 广告

评论区