• inotify软件实现实时同步,ssh-key 秘钥连接方式,saltstack实战批量管理Linux,expect批量分发秘钥


    什么是inotify呢,Inotify 是一个 Linux特性,它监控文件系统操作,比如读取、写入和创建。Inotify 反应灵敏,用法非常简单,并且比 cron 任务的繁忙轮询高效得多。学习如何将 inotify 集成到您的应用程序中,并发现一组可用来进一步自动化系统治理的命令行工具。

    首先要检查系统是否支持inotify,

     如果ls跳出这三个文件,就代表系统是支持的 。

    基本安装,这里是源码安装。

     如果提示gcc报错,要先安装gcc二进制编码工具。

    最后make  &&  make install 编译安装就好了

    最后可以echo $?  如果显示是0,就证明没有报错,就表示安装成功了。

    为了应用方便,咋们可以做一个软链接。

    ln -s /usr/local/inotify-tools-3.14/   /user/local/inotify-tools

     这里就可以演示怎么用了。

     

     基本功能会用了。那么我们就开始写脚本,实现自动同步。

    先提一嘴,为了把rsync里同步的目录分开,防止误删除。所以我们做同步的时候要两个目录分开。不然误删除数据会很危险。

     然后我们就可以写脚本实现自动监测同步了。上脚本,并把脚本加入到rc.local的文件下,也就是开机启动。因为inotify wait开启了就是固定到前台模式,我们可以设置到后台运行。

    #!/bin/bash
    inotify=/usr/local/inotify-tools/bin/inotifywait
    $inotify -mrq --format '%w%f' -e create,close_write,delete /backup 
    |while read file
    do
       cd /backup &&
            rsync -avz ./backup --delete /backup/ admin@192.168.10.222::common2  --password-file=/root/passwd
    done

     关于inotify的优化。

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

    现在看看SSH连接,就是Linux用SSH协议连接另一台Linux服务器。

     ssh的端口,其实我们都是可修改的,默认22的端口可能存在被攻击的风险。

    默认我们可以用用户名和密码来连接。但是如果我们用了公钥和私钥的话,就不需要再每次输入密码那么 麻烦了。

    默认这样就连过去了。第一次连接他会生成一个秘钥。秘钥在

    把这个生成的秘钥删除,下次还会提示,要打一个yes.

    现在试试生成公钥和私钥。

     上面也有提示存放路径

     通过命令把公钥拷贝到目标服务器。

     现在我们不用透过密码就可以直接连过去了。其实很多人写的跳板机也是这个原理哈。

     如果是很多台需要这样认证,实现批量管理,我们就可以写shell脚本就可以了。

    现在我们可以免密登录到多台Linux服务器了,那么我们就可以利用scp协议来单个传输文件了。

    我们可以写一个批量脚本。

    #!/bin/sh
    . /etc/init.d/functions
    
    if [ $# -ne 1 ]
       then
        echo "USAGE:$0 {FILENAME|DIRNAME}"
        exit 1
    fi
    
    for n in 220 221 222
    do
       scp -P22 -r $1 oldgirl@192.168.10.$n:~ &>/dev/null
       if [ $? -eq 0 ]
          then
             action "fenfa $1 ok " /bin/true
       else
             action "fenfa $1 ok" /bin/false
        fi
    done

    这里面执行的时候需要加参数,不然会报错。也就是你要传输的文件名。

    最后执行的返回结果,非常漂亮。

    另外一个脚本就是批量执行命令。

    #!/bin/sh
    
    if [ $# -ne 1 ]
       then
       echo "USAGE:$0 COMMAND"
       exit 1
    fi
    for n in 220 221 222
    do
       echo "主机(ip):192.168.10.$n"
       ssh -p22 oldgirl@192.168.10.$n $1
    done

    返回结果。

     基本上就可以提现了。

    因为rsync服务好像普通用户很多都传不了,所以要sudo.

    echo 'oldgirl ALL=(ALL) NOPASSWD:/usr/bin/rsync' >>/etc/sudoers 追加rsync到 sudo

    visudo -c 检查语法是否正确
    grep oldgirl /etc/sudoers 查看是否存在


    ssh -t oldgirl@192.168.10.222 sudo rsync host /etc/

    然后想说说,saltstack 。

    但是我居然没有安装成功。估计自己还得琢磨琢磨,后面再更新。

    --------------------------------------------------------------------------------------------------------------------------

    这里说说怎么批量分发秘钥,用到一个工具叫做expect。他可以实现批量分发秘钥,而且不用每次都输入密码。如果是1000台机器的管理,就可以用到这样的工具,很有优势。

    因为ssh-copy-id这个工具是每次都要输入密码的,太麻烦了。

    首先是安装expect

    yum install expect -y

     已安装成功。

    新建一个后缀为exp的脚本,比如expect1.exp 

    #! /usr/bin/expect
    spawn ssh -p22 root@192.168.10.222 /sbin/ifconfig ens33
    set timeout 60
    expect "*password:"
    send "iso9001
    "
    expect eof
    exit

    就是这么简单的脚本,然后expect expect1.exp执行以下,就可以了。

    那么有时候会出现yes提示,怎么忽略这种提示呢?

    #! /usr/bin/expect
    spawn ssh -p22 root@192.168.10.222 /sbin/ifconfig ens33
    set timeout 60
    expect {
            -timeout 5
            "yes/no"  { exp_send "yes/r";exp_continue }
            " *password:" { exp_send "iso9001
    "}
            timeout {puts "expect was timeout by oldboy.";return}
    }
    expect eof
    exit

    这段就可以忽略yes 的提示了。

      

  • 相关阅读:
    旋转加载loading和点点加载loadingdemo
    css 点点加载demo
    gulp——myself配置
    AngularJS官网seed目录结构
    CSS content换行技术实现字符animation loading效果
    gulp入门与一些基本设置
    css 图标 旋转中
    【图文教程】WebStorm下使用Github下载以及上传代码
    gulp-uglify的使用
    面试题 ——— 二维数组的查找
  • 原文地址:https://www.cnblogs.com/davidz/p/13370558.html
Copyright © 2020-2023  润新知