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

2021/4/14 7:28:44

本文主要是介绍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 filedo
   cd /backup &&rsync -avz ./backup --delete /backup/ admin@192.168.10.222::common2  --password-file=/root/passwddone

 关于inotify的优化。

 

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

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

 

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

 

 

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

 

 

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

 

 

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

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

 

 上面也有提示存放路径

 

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

 

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

 

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

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

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

#!/bin/sh. /etc/init.d/functionsif [ $# -ne 1 ]   thenecho "USAGE:$0 {FILENAME|DIRNAME}"exit 1fifor n in 220 221 222do
   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/falsefidone

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

 

 

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

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

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

 

返回结果。

 

 基本上就可以提现了。

因为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 60expect "*password:"send "iso9001\n"expect eof
exit

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

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

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

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

 

  



这篇关于inotify软件实现实时同步,ssh-key 秘钥连接方式,saltstack实战批量管理Linux,expect批量分发秘钥的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!


扫一扫关注最新编程教程