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

简介:

现在有一个这样的需求:

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


要实现这样的需求,我们使用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 就可以进行相关内容的同步并进行自动停止和重启服务,完成正式环境的自动化部署。

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









目录
相关文章
|
17天前
|
运维 安全 Linux
Linux中传输文件文件夹的10个scp命令
【10月更文挑战第18天】本文详细介绍了10种利用scp命令在Linux系统中进行文件传输的方法,涵盖基础文件传输、使用密钥认证、复制整个目录、从远程主机复制文件、同时传输多个文件和目录、保持文件权限、跨多台远程主机传输、指定端口及显示传输进度等场景,旨在帮助用户在不同情况下高效安全地完成文件传输任务。
119 5
|
5天前
|
网络协议 Linux
linux系统重要文件目录
本文介绍了Linux系统中的重要目录及其历史背景,包括根目录、/usr、/etc、/var/log和/proc等目录的结构和功能。其中,/etc目录下包含了许多关键配置文件,如网卡配置、DNS解析、主机名设置等。文章还详细解释了各目录和文件的作用,帮助读者更好地理解和管理Linux系统。
20 2
|
4天前
|
缓存 监控 Linux
|
8天前
|
Linux Shell 数据库
文件查找是Linux用户日常工作的重要技能介绍了几种不常见的文件查找方法
文件查找是Linux用户日常工作的重要技能。本文介绍了几种不常见的文件查找方法,包括使用`find`和`column`组合、`locate`和`mlocate`快速查找、编写Shell脚本、使用现代工具`fd`、结合`grep`搜索文件内容,以及图形界面工具如`Gnome Search Tool`和`Albert`。这些方法能显著提升文件查找的效率和准确性。
28 2
|
11天前
|
Linux 数据库
linux 全局搜索文件
在 Linux 系统中,全局搜索文件常用 `find`、`locate` 和 `grep` 命令。`find` 根据文件名、类型、大小、时间戳等条件搜索;`locate` 通过预构建的数据库快速查找文件;`grep` 在文件中搜索特定文本,常与 `find` 结合使用。选择合适的命令取决于具体需求。
|
15天前
|
Linux 开发工具 Perl
Linux命令替换目录下所有文件里有"\n"的字符为""如何操作?
【10月更文挑战第20天】Linux命令替换目录下所有文件里有"\n"的字符为""如何操作?
30 4
|
14天前
|
运维 安全 Linux
Linux文件清空的五种方法总结分享
每种方法各有优势,选择最合适的一种或几种,可以极大提高您的工作效率。更多有关Linux系统管理的技巧与资源,欢迎访问,持续提升您的运维技能。
60 1
|
6月前
|
NoSQL Linux MongoDB
Linux scp 命令详解
Linux scp 命令详解
102 0
|
安全 Linux 网络安全
在Linux中传输文件文件夹的10个scp命令
本文为转载,原文链接为:https://mp.weixin.qq.com/s/IPFNwPiWioMPAix51hrXzg
|
3月前
|
运维 安全 Linux
【超实用秘籍】Linux文件传输新高度:10个scp命令让你瞬间变身文件传输达人,从此告别繁琐操作!
【8月更文挑战第13天】文件传输是运维工作的核心部分,尤其对Linux用户来说,了解高效且安全的传输方法非常重要。本文介绍10种scp命令的应用技巧,涵盖基础文件传输、密钥认证、目录复制等场景,助你灵活运用这一基于SSH协议的安全工具。从简单的文件传输到复杂的多主机文件迁移,scp都能轻松应对。通过本文的学习,你将能更熟练地使用scp命令,提高工作效能。
217 6