ICode9

精准搜索请尝试: 精确搜索
首页 > 系统相关> 文章详细

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

2021-04-13 23:09:13  阅读:270  来源: 互联网

标签:bin inotify 批量 192.168 秘钥 expect ssh


什么是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 的提示了。

 

  

标签:bin,inotify,批量,192.168,秘钥,expect,ssh
来源: https://blog.51cto.com/u_3180829/2704442

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有