Linux中crontab下scp文件传输的两种方式

Linux下文件传输一般有两个命令scp、ftp(工具需要下载安装)

本文主要讲讲scp的文件传输脚本

1、scp ssh-keygen -t rsa免输入密码,传输

这里假设主机A 用来获到主机B的文件。 

在主机A的用户根目录下执行如下命令来生成配对密钥:

ssh-keygen -t rsa 

遇到提示回车默认即可,两次回车后,显示完成。公钥被存到用户目录下.ssh目录,比如root存放在:

/root/.ssh/id_rsa.pub

将 .ssh 目录中的 id_rsa.pub 文件复制到 主机B 的 ~/.ssh/ 目录中,并改名为 authorized_keys,

到主机A中执行命令和主机B建立信任,例(假设主机B的IP为:192.168.100.4):

scp ~/.ssh/id_rsa.pub 192.168.100.4:/root/.ssh/authorized_keys (如果是集群之间实现秘钥免登录,authorized_keys里面的内容就只能累加,而不能这样直接修改文件名)

下面就可以用scp、ssh命令不需要密码来获取主机B的文件了

ssh 192.168.100.4 回车就不需要密码了。

注:其实id_rsa.pub内容添加到对方机器的authorized_keys中就行了

2、scp中使用expect 进行文件传输

脚本如下:

#!/bin/bash

time=`date +%Y%m%d_%H%M%S`
ip=`ifconfig eth0 |grep "inet addr"|awk -F ":" '{print $2}'|awk '{print $1}'`   #获取机器的ip地址
if [ ! -d /tmp/back ]; then
    mkdir -p /tmp/back
fi
cd /tmp/back
if [[ -d test ]]; then
    rm -r -f /tmp/back
fi

if [ $1 = "script" ]; then                 #获取运行脚本是传入的参数,根据不同的参数备份不同的文件
   if [ ! $2 ]; then
    cp -r /home/www/scheduleshell /tmp/back    #默认文件地址
  else
    cp -r -f $2 /tmp/back
  fi

elif [ $1 = "crontab" ]; then
    cp -r /var/spool/cron /tmp/back
else
    echo "the words is not defined!"
    exit 0
fi
cd /tmp/back
pwd
tar -zvcf $ip-$time-$1.tar.gz ./*
/usr/bin/expect -c "         #expect语句部分,根据命令行提示输入密码,没有考虑容错部分   crontab 使用的环境变量可能与我们手动执行的时候有点不一致,运行的时候加上绝对路径会好一点
set timeout 10
spawn scp -r /tmp/back/$ip-$time-$1.tar.gz root@172.*.*.176:/home/hefeng/
expect \"password:\" {send \"password\r\"}
spawn scp -r /tmp/back/$ip-$time-$1.tar.gz root@172.*.*.182:/home/hefeng/
expect \"password:\" {send \"password\r\"}
expect eof
exit                                                     #使用interact 在crontab下运行会有点问题
" 
if [ $? !=0 ]; then 
  echo "step for scp is failed" 
  exit 0 
fi 
rm -r -f /tmp/back/*

 

posted @ 2016-05-30 10:30  贺呵呵  阅读(1701)  评论(1编辑  收藏  举报