zoukankan      html  css  js  c++  java
  • 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
    "}
    spawn scp -r /tmp/back/$ip-$time-$1.tar.gz root@172.*.*.182:/home/hefeng/
    expect "password:" {send "password
    "}
    expect eof
    exit                                                     #使用interact 在crontab下运行会有点问题
    " 
    if [ $? !=0 ]; then 
      echo "step for scp is failed" 
      exit 0 
    fi 
    rm -r -f /tmp/back/*
  • 相关阅读:
    HDU 5640 King's Cake
    HDU 5615 Jam's math problem
    HDU 5610 Baby Ming and Weight lifting
    WHU1604 Play Apple 简单博弈
    HDU 1551 Cable master 二分
    CodeForces659C Tanya and Toys map
    Codeforces 960E 树dp
    gym 101485E 二分匹配
    Codeforces 961E 树状数组,思维
    Codeforces Round #473 (Div. 2) D 数学,贪心 F 线性基,模板
  • 原文地址:https://www.cnblogs.com/tester-hehehe/p/5541558.html
Copyright © 2011-2022 走看看