zoukankan      html  css  js  c++  java
  • linux实现自动远程备份(scp+ssh)

    刚上线的服务器需要备份日志,要备份到另一台服务器上去,为了减少工作量,采用linux的定时任务去自动执行。因服务器都是linux的,因此采用linux的远程复制scp命令。但这里涉及到一个问题,就是scp命令执行时需要输入密码,在网上大概搜集了下有两种方法:①一种是采用except方法(会存储明文密码);②采用ssh生成密钥的方式。这里我采用第二种方式。耗时两天,中途遇到各种问题,不过总算解决了

    备份方式:拷贝前一天的日志文件到备份服务器,再压缩后删除复制的本地文件。日志文件每天都会产生,格式都为access_20151214类似的文件名。

      #首先用变量保存前一天的日期:

      ngnix_day=$(date -d last-day +%Y%m%d)

      接着备份文件

      scp root@192.168.1.240:/logdata/access_$ngnix_day.log /logdata/nginxlog/ 

      (scp... 源文件  目标路径)

      将复制的日志文件压缩后再删除源文件(--remove-files)

      tar -czf access_$ngnix_day.tar.gz access_$ngnix_day.log --remove-files

    到这里已经完成备份操作

    下面是实现scp无密码登录

    1、在 A 上运行 ssh-keygen -t rsa 在/root/.ssh 下生成id_rsa 和 id_rsa.pub 两个文件
    在/root/.ssh下复制备份一份id_rsa.pub 命名为 id_rsa.pub.A

    2. 在 B 上也同样运行 ssh-keygen -t rsa

    3、在 B 的 /root/.ssh 下创建authorized_keys文件 把A 中 id_rsa.pub.A 文件 传到 B /root/.ssh 下
        通过 cat 命令 把id_rsa.pub.A 写到 authorized_keys 文件中

      scp ./id_rsa.pub.A  B的IP:/root/.ssh
       cat id_rsa.pub.A  >>  authorized_keys

    测试:最终从B服务器拷贝文件到A上,就无需输入密码了

    在生成密钥的过程中,一直Enter即可,否则还是需要输入设置的密码

    =============================================================

    下面是具体的源码,很简单的功能:

    #!/bin/bash
    ngnix_day=$(date -d last-day +%Y%m%d)
    node_day=$(date -d yesterday +%Y-%m-%d)
    #backup xx.172.129.xx node4
    ssh root@xx.172.129.xx "sh /logdata/sh/node4_backup.sh"
    sleep 1m
    scp root@xx.172.129.xx:/logdata/access_$ngnix_day.tar.gz /logdata/nginxlog/node4-access_$ngnix_day.tar.gz
    scp root@xx.172.129.xx:/logdata/node1-$node_day.log /logdata/nodelog/node4-node1-$node_day.log
    scp root@xx.172.129.xx:/logdata/node2-$node_day.log /logdata/nodelog/node4-node2-$node_day.log
    scp root@xx.172.129.xx:/logdata/node3-$node_day.log /logdata/nodelog/node4-node3-$node_day.log
    date
    sleep 1m
    date
    if [ -f /logdata/nodelog/node4-node1-$node_day.log ];
    then ssh root@xx.172.129.xx "rm -f /logdata/node1-$node_day.log";
    else
    echo "The node4-node1-$node_day.log is not exists!" >>/logdata/sh/node.txt
    fi
    if [ -f /logdata/nodelog/node4-node2-$node_day.log ];
    then ssh root@xx.172.129.xx "rm -f /logdata/node2-$node_day.log";
    else
    echo "The node4-node2-$node_day.log is not exists!" >>/logdata/sh/node.txt
    fi
    if [ -f /logdata/nodelog/node4-node3-$node_day.log ];
    then ssh root@xx.72.129.xx "rm -f /logdata/node3-$node_day.log";
    else
    echo "The node4-node3-$node_day.log is not exists!" >>/logdata/sh/node.txt
    fi

    =============================================================

    问题:

    ①、第一次执行scp的时候会出现warning,这时候要输入“yes”。所以脚本编写完一定要手动执行一遍,防止定时执行失败

    ②、在win下编写shell时,换行符为: ,而在linux下为: ,因此在win下编写的脚本在linux下运行会报错,尽量避免这个问题。

    相关问题说明  http://www.myexception.cn/operating-system/1616889.html

      

  • 相关阅读:
    Ajax_原生ajax写法、理解异步请求、js单线程+事件队列、封装原生ajax
    Ajax_实现动态网站的技术、php语法、php接口、前端渲染和后端渲染
    Ajax_Apache访问资源文件的权限配置、资源存放路径配置、配置虚拟主机、动态网站静态网站区别
    Ajax_Ajax、客户端、服务器端的认识与比较、服务器环境的搭建wamp
    jquery_jquery插件、jqueryUI使用方法、自定义jquery插件(一个插件其实就是一个功能)
    jquery_jquery事件绑定和解绑、链式编程、jquery中的主动遍历each、多库共存
    jquery_jquery动态创建元素及应用
    jquery_jquery动画
    jquery_jquery样式操作、链式编程
    jquery_认识jquery好处、选择器、小案例
  • 原文地址:https://www.cnblogs.com/dvbbs2012/p/5047783.html
Copyright © 2011-2022 走看看