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/*
  • 相关阅读:
    MySQL常见错误解决方案
    mybatis连接MySQL8出现的问题
    mybatis逆向工程出现的问题
    linux学习——基础命令
    java excel导入oracle数据库
    关于layer弹框点击关闭按钮的问题
    java was started but return exit code=-805306369
    设计模式入门学习笔记----装饰者模式
    设计模式入门学习笔记----观察者模式
    设计模式入门学习笔记----策略模式
  • 原文地址:https://www.cnblogs.com/tester-hehehe/p/5541558.html
Copyright © 2011-2022 走看看