Linux使用expect实现远程拷贝文件

1.背景

公司有个项目打算用Nginx集群的方式部署在三台服务器共 7个tomcat里,这样更新的时候如果一个一个去更新显然会很麻烦,现在打算用执行命令的方式把要需要更新的文件直接拷贝覆盖到那7个tomcat里去(不知道有没有比这种更简便的更新方式,如果有还望赐教)。一开始打算先把要更新的文件拷贝在其中一个主服务器的目录下,然后执行shell脚本用cp和scp的命令把文件拷贝到当前服务器和另外两个服务器的tomcat里,但是在执行到scp命令的时候会提示需要输入系统用户的密码,最后发现使用expect可以避免这个麻烦。

2.安装

安装的方式有很多,这里使用比较简便的rpm方式来安装,安装之前需要先检查一下系统是否已经安装过expect:

#查看是否有安装过tcl(expect需要依赖tcl)

rpm -qa | grep tcl

#查看是否有安装过expect

rpm -qa | grep expect

如果有输出显示已经安装过了,那就不用安装了。

安装需要准备的工具:

先安装tcl:

rpm -ivh tcl-*

再安装expect:

rpm -ivh expect-5.44.1.11-1.240.x86_64.rpm 

3.脚本

dealrsync.sh:把本机项目拷贝到本机的tomcat,循环执行远程拷贝的expect脚本

#/bin/sh
#同步各服务器的项目

#源文件
src_file=testproject

#把项目复制到本主机服务器的tomcat
cp -pr $src_file /home/was/webtest/tom1
cp -pr $src_file /home/was/webtest/tom2
cp -pr $src_file /home/was/webtest/tom3

#把项目复制到其他主机服务器的tomcat

#格式:ip 用户名 密码 目标文件地址
remoteserver_list="remoteserver_list.conf"
cat $remoteserver_list | while read line

do
  host_ip=`echo $line|awk '{print $1}'`
  username=`echo $line|awk '{print $2}'`
  password=`echo $line|awk '{print $3}'`
  dest_file=`echo $line|awk '{print $4}'`
  ./remotescp.sh $src_file $username $host_ip $dest_file $password
done

rsyncfiles.sh:把本地文件拷贝到远程服务器

#!/usr/bin/expect
if {$argc < 2} {
    send_user "usage: $argv0 src_file username ip dest_file password\n"
    exit
}
set src_file [lindex $argv 0]
set username [lindex $argv 1]
set host_ip [lindex $argv 2]
set dest_file [lindex $argv 3]
set password [lindex $argv 4]

spawn scp -pr $src_file $username@$host_ip:$dest_file
expect {
        "(yes/no)?"
        {
                send "yes\n"
                expect "*assword:" {send "$password\n"}
        }
        "*assword:"
        {
                send "$password\n"
        }
}
expect "100%"
expect eof

remoteserver_list.conf:远程主机服务器地址列表(如果密码里有特殊字符则需要转义)

192.168.1.11 root ****** /home/was/webtest/tom4
192.168.1.11 root ****** /home/was/webtest/tom5
192.168.1.12 root ****** /home/was/webtest/tom6
192.168.1.12 root ****** /home/was/webtest/tom7
 

  • 3
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值