博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Ubuntu16.04实现定时免密远程拷贝脚本
阅读量:4290 次
发布时间:2019-05-27

本文共 2043 字,大约阅读时间需要 6 分钟。

问题描述:

编写一个shell脚本,实现:
(1)传入3个参数(主机ip、用户名和密码)
(2)定时远程拷贝一个文件到指定主机的目录。
PS:可以将参数传给crontab,第一次运行时将3个参数放到txt文件中,后面每次运行时从文本文件中读入用户名和密码。

一、实现远程拷贝:

/home/hadoop/remote_copy.sh

#!/bin/bash    #定义3个变量:主机ip,用户名,密码    echo "主机ip:$1"    echo "用户名:$2"    #远程拷贝    scp 源文件 用户名@目的地ip:目的地文件夹,例如:    scp  /home/hadoop/hello.sh  $2@$1:/home/lxxinn

用如下命令执行脚本:

cd /home/hadoop.//remote_copy.sh

二、实现免密

上述scp在执行时需要手动输入密码进行交互,因此这步实现免密输入功能。通过查询资料,发现expect命令可以实现自动的交互式任务,而无需人工干预。

1、安装expect:

expect是在Tcl基础上创建起来的,所以在安装expect前我们应该先安装Tcl。
(一)Tcl 安装

主页:

下载地址:
1.下载源码包

wget http://nchc.dl.sourceforge.net/sourceforge/tcl/tcl8.4.11-src.tar.gz

2.解压缩源码包

tar xfvz tcl8.4.11-src.tar.gz

3.安装配置

cd tcl8.4.11/unix  ./configure --prefix=/usr/tcl --enable-shared  make  make install

注意:

1)安装完毕以后,进入tcl源代码的根目录,把子目录unix下面的tclUnixPort.h copy到子目录generic中。

2)暂时不要删除tcl源代码,因为expect的安装过程还需要用。

(二)ubuntu安装expect命令:

sudo apt-get install expect

查看expect是否安装成功:

hadoop@Master:~$ expectexpect1.1> exithadoop@Master:~$

(三)编写免密远程拷贝脚本

remote_copy.sh

#!/usr/bin/expect  #上述语句为expect解释器的位置#设定3个需要手动输入的参数:主机ip,用户名,密码#如果在执行scp任务时遇到了代码中没有指定的异常,则在等待10秒后该脚本的执行会自动终止set timeout 10  set host [lindex $argv 0]set username [lindex $argv 1]set password [lindex $argv 2]#启动新的进程,spawn后的send和expect命令都是和使用spawn打开的进程进行交互spawn scp /home/hadoop/hello.sh $username@$host:/home/lxxinn #等待上述spawn打开的拷贝进程的反馈,根据该进程的反馈,再发送对应的交互命令expect {#进程询问(yes/no)?	"(yes/no)?" 	{#向进程发送yes命令	 send "yes\n" #*表示通配符?	 expect "*password:" {send "$password\n"} 	}#进程要求输入密码	"*password:" 	{ 	 send "$password\n"	}}#拷贝完后,进程显示100%;若没有收到100%的消息,则一直等,等10秒过后还没收到消息,则自动终止脚本--前面设置的timeoutexpect "100%" #与spawn对应,表示捕获终端输出信息的终止expect eof

参考资料:

赋予脚本可执行权限:

sudo chmod +x remote_copy.sh

运行此expect脚本:

./remote_copy.sh 172.29.22.31 lxxinn 1234

三、为脚本添加定时执行

用命令crontab -e打开cron配置文件,添加如下内容:

01 * * * * /home/hadoop/remote_copy.sh

Note:每分钟执行一次脚本

一旦在cron配置文件配置文件中添加了此任务,保存关闭后,cron任务即开始执行。
PS:新创建的cron作业,不会马上执行,至少要过2分钟才执行。如果重启cron服务则会马上执行

重启命令:service cron restart

使用下面的命令可以移除已经计划的cron作业:

crontab -r

使用下面的命令移除所有已计划的cron作业,且无需再次确认。

crontab -ir

参考:

用cron定时执行shell脚本:

转载地址:http://mzegi.baihongyu.com/

你可能感兴趣的文章
Android内存泄露的原因
查看>>
Java并发总结
查看>>
JavaScript筑基篇(二)->JavaScript数据类型
查看>>
干货:Java几种线程池的分析和使用。
查看>>
避免在Java接口中使用数组的3个理由
查看>>
android 自定义带动画的统计饼图
查看>>
入职必备,Android 真实面试题(内有答案)
查看>>
JavaScript 日期处理类库---Moment.js
查看>>
仿斗鱼直播的弹幕效果实现
查看>>
Android(Java)中的Object
查看>>
Java反射机制——学习总结
查看>>
Android大图片处理
查看>>
Hadoop平台相关技术
查看>>
Android中热修复框架AndFix原理解析及案例使用
查看>>
手写代码实现EventBus
查看>>
关于JSON的相关知识
查看>>
SpringMVC基础_常用注解
查看>>
Spring框架-IOC容器和Bean的配置(1)
查看>>
查询内容在网页里面分页显示+跳页查看
查看>>
mysql substring函数截取值后赋给一个declare变量
查看>>