自动连接多台机器并搜寻日志的脚本

我们应用部署在10台机器上,对应地日志文件也分散在这10台上。若想从这10份日志文件中,搜索,如报错信息,是比较常见的需求。
 
下面的脚本干的就是这事儿。大体逻辑十分简单:
 
Pseudocode: 
for hostname in (10台机器): 
    ssh连接远程host 
    从日志文件中找出符合条件的行并写到本地文件中
 
看似简单,但对于shell编程生疏的我来讲,有以下两个难点
1. 如何ssh时,不需要手动输入passphase/password
2. 如何结束当前ssh session后,继续开启下一个ssh session
 
google了半天,运气算好,搞定了,解决方案如下:
 
1. 如何ssh时,不需要手动输入passphase/password?
 
用ssh-agent!此进程启动后,只需手动输入passphase一次,则ssh-agent就会记住你的passphase,后面连接远程机子时,它会自动从记忆中读取,不需要人为再次输入了。
 
环境设置如下:
 
1) 生成public/private key pairs:
    $ssh-keygen -t dsa
 
2) 把生成的public key (id_dsa.pub)放到10台远程机器上
    $scp .ssh/id_dsa.pub username@hostname:.ssh/authorized_keys  (10次)
 
3) 确保ssh-agent已启动,若无,则启动:
    $ps aux | grep ssh-agent      #check if it`s running
    $eval `ssh-agent`                 #if not, start up the agent process
 
4) 向ssh-agent提交你的passphase:
    $ssh-add
 
5) 把ssh-agent相关信息保存到变量中,以便在执行脚本时导入引用:
    $ssh-agent -s > ~/.bashrc
 
6) 脚本中记得引入变量即可,如:
    $source ~/.bashrc
 
2. 如何结束当前ssh session后,继续开启下一个ssh session?
<<"EOF"
EOF
 
具体原理,后面再补充!
 
到此,整个可执行脚本就出来了。再在crontab -e里写上一行,轻轻松松让它每天自动收集报错信息并发邮件给俺!
脚本附上,写得实在是粗陋,随便嫌弃哈,不用对我客气!
顺便,若有更简洁的解决方案,求不吝赐教!
 
#!/bin/bash 
source ~/.bashrc 
 
hostfile="/home/bai/host_videoapi"             #一机器一行
keyword="fail@"                                        #查询的关键字
search_log="videoapi.log"                      #查寻的日志文件名 
outputfile="error_videoapi.log"                #output file 
 
#挨个儿连接并搜寻错误信息
while read line  
do  
    vahost=$line  
    echo "---hostname:" $vahost "-----" >> $outputfile 
    ssh $vahost "find /home/videoapi/logs -type f -name $search_log -exec  grep -i $keyword {} \; -print " >> $outputfile  <<"EOF"
EOF 
    echo "---finishing-----"  
done < $hostfile  
 
#查看是否有错误信息,有则发邮件,无则done nothing 
if grep -q $keyword $outputfile 
then  
    mail -s "errors in videoapi!" bai@126.com < $error_log  
else  
    echo "it is a nice day!"  
fi 

 

转载于:https://www.cnblogs.com/phoenixbai/p/ssh_autoconnect.html

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值