Ubuntu16.04实现定时免密远程拷贝脚本

问题描述:
编写一个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 安装

主页: http://www.tcl.tk
下载地址: http://www.tcl.tk/software/tcltk/downloadnow84.tml
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:~$ expect
expect1.1> exit
hadoop@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秒过后还没收到消息,则自动终止脚本--前面设置的timeout
expect "100%" 
#与spawn对应,表示捕获终端输出信息的终止
expect eof 

参考资料:https://www.cnblogs.com/lixigang/articles/4849527.html

赋予脚本可执行权限:

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脚本: https://blog.csdn.net/sanyaoxu_2/article/details/78893563

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值