shell 脚本获取远程服务器信息并发送邮件

 1 [[email protected] expect]# cat ssh_dsa.exp
 2 #!/usr/bin/expect
 3 set ip [lindex $argv 0]
 4 set pass [lindex $argv 1]
 5 set port [lindex $argv 2]
 6 set user [lindex $argv 3]
 7 set id_dsa [lindex $argv 4]
 8
 9 if { $id_dsa == "1" } {set id "id_dsa_wdzj";set i "-i"
10 spawn ssh $i $id -p $port [email protected]$ip "df -hP;free -m;uptime"
11 expect {
12 "*(yes/no)?"         {send  "yes\r"; exp_continue}
13 "*password:"      { send "$pass\r"}
14 "*id_dsa_wdzj‘:" { send "$pass\r"}
15 }
16 }
17 if { $id_dsa == "0" } {
18 spawn ssh -p $port [email protected]$ip "df -hP;free -m;uptime"
19 expect {
20 "*(yes/no)?"         {send  "yes\r"; exp_continue}
21 "*password:"      { send "$pass\r"}
22 }
23 }
24
25 expect eof
 1 [[email protected] expect]# cat email_ssh.sh
 2 #!/bin/bash
 3
 4 DIR=‘/root/shell/expect‘
 5
 6 function Ssh(){
 7 clear
 8 >$DIR/dev.log
 9 >$DIR/dev2.log
10
11 echo ‘<!--StartFragment--> <table width="880" height="97" style="border-collapse:collapse;width:660.00pt;"> <colgroup><col width="157"> <col width="179"> <col width="186"> <col width="159"> <col width="199"> </colgroup><tbody><tr height="36"> <td class="et2" colspan="5" x:str="" height="36" width="838" style="font-size: 19px; text-align: center; vertical-align: middle; background-color: rgb(0, 0, 0); height: 27pt; width: 628.5pt; font-family: 宋体;"><font color="#ff0000"><b>cpu、内存、磁盘使用情况表1.0</b></font></td> </tr> <tr height="29"> <td class="et4" x:str="" height="29" width="157" style="font-size: 12pt; text-align: center; vertical-align: middle; border: 0.5pt dashed rgb(0, 0, 0); background-color: rgb(0, 128, 0); height: 21.75pt; width: 117.75pt; font-family: 宋体;"><font color="#ffffff">ip</font></td><td class="et4" x:str="" height="29" width="179" style="font-size: 12pt; text-align: center; vertical-align: middle; border: 0.5pt dashed rgb(0, 0, 0); background-color: rgb(0, 128, 0); height: 21.75pt; width: 134.25pt; font-family: 宋体;"><font color="#ffffff">cpu负载大于1.0</f    ont></td><td class="et4" x:str="" height="29" width="186" style="font-size: 12pt; text-align: center; vertical-align: middle; border: 0.5pt dashed rgb(0, 0, 0); background-color: rgb(0, 128, 0); height: 21.75pt; width: 139.5pt; font-family: 宋体;"><font color="#ffffff">磁盘大于80%</font></td><td class="et4" x:str="" height="29" width="159" style="font-size: 12pt; text-align: center; vertical-align: middle; border: 0.5pt dashed rgb(0, 0, 0); background-color: rgb(0, 128, 0); height: 21.75pt; width: 119.25pt; font-family: 宋体;"><font color="#ffffff">内存大于90%</font></td><td class="et4" x:str="" height="29" width="199" style="font-size: 12pt; text-align: center; vertical-align: middle; border: 0.5pt dashed rgb(0, 0, 0); background-color: rgb(0, 128, 0); height: 21.75pt; width: 149.25pt; font-family: 宋体;"><font color="#ffffff">时间</font></td> </tr> ‘ >> $DIR/dev2.log
12
13 for i in `cat $DIR/config.txt`
14 do
15 ip=`echo $i| cut -d"," -f1`
16 passwd=`echo $i| cut -d"," -f2`
17 port=`echo $i| cut -d"," -f3`
18 user=`echo $i| cut -d"," -f4`
19 id=`echo $i| cut -d"," -f5`
20 $DIR/ssh_dsa.exp $ip $passwd $port $user $id > $DIR/ssh.log 2>&1
21
22 echo ‘<tr height="32">‘ >> $DIR/dev.log
23
24
25 echo "<td class=‘et6‘ x:str=‘‘ height=‘32‘ width=‘157‘ style=‘font-size: 12pt; text-align: center; vertical-align: middle; border: 0.5pt dashed rgb(0, 0, 0); background-color: rgb(192, 192, 192); height: 24pt; width: 117.75pt; font-family: 宋>体;‘>$ip</td>" >> $DIR/dev.log
26
27 #---average---
28 average=`tail -1 $DIR/ssh.log  | awk -v avg=$avg -F"[,:]" ‘{if ($(NF-2) > avg) print $0}‘| awk -F‘load average:‘ ‘{print $2}‘`
29 echo "<td class=‘et6‘ x:str=‘‘ height=‘32‘ width=‘157‘ style=‘font-size: 12pt; text-align: center; vertical-align: middle; border: 0.5pt dashed rgb(0, 0, 0); background-color: rgb(192, 192, 192); height: 24pt; width: 117.75pt; font-family: 宋>体;‘>$average</td>" >> $DIR/dev.log
30 #---endaverage---
31
32
33
34 #---disk---
35 Df_nr=`awk ‘{if ($1=="total") print NR}‘ $DIR/ssh.log`
36 Free_nr=`awk ‘{if ($1=="Swap:") print NR+1}‘ $DIR/ssh.log`
37 Disk=`awk -v Df_nr=$Df_nr ‘{if (NR<Df_nr) print $0}‘ $DIR/ssh.log | awk -v disk=$disk ‘{if ($5 > disk && NR >3) print $1,$5,$NF}‘`
38 echo "<td class=‘et6‘ x:str=‘‘ height=‘32‘ width=‘157‘ style=‘font-size: 12pt; text-align: center; vertical-align: middle; border: 0.5pt dashed rgb(0, 0, 0); background-color: rgb(192, 192, 192); height: 24pt; width: 117.75pt; font-family: 宋>体;‘>$Disk</td>" >> $DIR/dev.log
39 #---enddisk---
40
41
42
43 #---mem---
44 Free=`awk -v Free_nr=$Free_nr -v Df_nr=$Df_nr ‘{if (NR<Free_nr && NR>Df_nr) print $0}‘ $DIR/ssh.log | awk -v mem=$mem ‘{if (NR==1) {b=$3/$2*100;a=$0}}END{if (b>mem) print a}‘| awk ‘{print "total:"$2,"used:"$3,"free:"$4}‘`
45
46 echo "<td class=‘et6‘ x:str=‘‘ height=‘32‘ width=‘157‘ style=‘font-size: 12pt; text-align: center; vertical-align: middle; border: 0.5pt dashed rgb(0, 0, 0); background-color: rgb(192, 192, 192); height: 24pt; width: 117.75pt; font-family: 宋>体;‘>$Free</td>" >> $DIR/dev.log
47 #---endmem---
48
49 #---time---
50 Date=`date +%Y-%m-%d" "%H:%M:%S`
51 echo "<td class=‘et6‘ x:str=‘‘ height=‘32‘ width=‘157‘ style=‘font-size: 12pt; text-align: center; vertical-align: middle; border: 0.5pt dashed rgb(0, 0, 0); background-color: rgb(192, 192, 192); height: 24pt; width: 117.75pt; font-family: 宋>体;‘>$Date</td>" >> $DIR/dev.log
52 #---endtime---
53
54 echo ‘</tr>‘ >> $DIR/dev.log
55 done
56 }
57 disk="80%"
58 mem=90
59 avg=‘1‘
60 Ssh
61 cat -v $DIR/dev.log | tr -d "^M" >> $DIR/dev2.log
62 echo ‘</tbody></table> <!--EndFragment-->‘ >> $DIR/dev2.log
63 cat $DIR/dev2.log| mutt -s ‘cpu,mem,disk‘ -e ‘set content_type="text/html"‘ [email protected]
1 [[email protected] expect]# cat config.txt
2 115.29.x.x,password,22,user,1
3 115.29.x.x,password,22,user,1
4 121.40.x.x,password,22,user,1
5 115.29.x.x,password,2220,user,1
6 192.168.11.82,password,22,root,0
7 121.199.x.x,password,2220,user,1
8 192.168.11.83,password,22,root,0
9 121.41.x.x,password,2220,user,1
时间: 2024-08-07 08:24:48

shell 脚本获取远程服务器信息并发送邮件的相关文章

使用shell脚本监控少量服务器并发送微信告警信息

01. 概括 1.0 脚本更新地址Git更新地址:shell_monitor_script.sh文章原文地址:使用shell脚本监控少量服务器并发送微信告警信息 1.1 前提:平台系统:linux系统下接收信息:微信企业号 1.2 脚本说明需要修改微信接口脚本对应参数的修改:包括IP,告警阈值等 1.3 脚本使用该脚本监控包括Disk.CPU.MEM.LOAD等主机资源,以及docker服务和docker容器.将该脚本附件假定放于:/home/mai/.check_host.sh.那么在定时任务

Windows系统中使用WMI获取远程服务器的信息

使用WMI获取远程服务器的状态 我做的项目里边主要包含两个内容: (1)对发布在服务器上的服务(IIS服务.WCF服务)是否可以正常访问: (2)获取服务器上的部分指标:如CPU.内存.磁盘空间信息等. 在做这个功能的时候因为涉及到多个服务器或PC机,所以碰到的问题各不一样,服务器上主要的操作系统有window2003.win7.windows 2008,对应的操作系统都是64位的,我把碰到为问题简单记录一下,使用C#进行远程访问时需要关注的点如下: 1.确认远程访问访问的服务器可用:服务器存在

linux shell 脚本获取和替换文件中特定内容

1.从一串字符串中获取特定的信息 要求1:获取本机IP:menu.lst为系统镜象的IP配置文件,需要从中获取到本机IP信息(从文件获取信息) 1 timeout 1 2 default 0 3 4 title live 5 find --set-root /casper/vmlinuz 6 kernel /casper/vmlinuz boot=casper ignore_uuid showmounts ip=eth0,10.0.66.66,255.255.240.0,10.0.64.3 7

python 学习笔记 12 -- 写一个脚本获取城市天气信息

最近在玩树莓派,前面写过一篇在树莓派上使用1602液晶显示屏,那么能够显示后最重要的就是显示什么的问题了.最容易想到的就是显示时间啊,CPU利用率啊,IP地址之类的.那么我觉得呢,如果能够显示当前时间.温度也是甚好的,作为一个桌面小时钟还是很精致的. 1. 目前有哪些工具 目前比较好用的应该是 weather-util, 之前我获取天气信息一般都是通过它. 使用起来也很简单: (1) Debian/Ubuntu 用户使用 sudo apt-get install weather-util 安装

C#获取远程计算机硬件信息实例(支持linux和windows)

原文:C#获取远程计算机硬件信息实例(支持linux和windows) 网上关于WMI的资料很多,但一直没有比较全的属性介绍.今天通过反射把所有属性都给弄出来了. 关于WMI的代码就不多说了. 需要手动添加引用:System.Management /// <summary>        /// 获取查询队列        ///         /// </summary>        /// <param name="ip"></para

PHP获取当前服务器信息的基本语句

下面是PHP获取当前服务器信息的基本语句. PHP程式版本: <?PHP echo PHP_VERSION; ?> ZEND版本: <?PHP echo zend_version(); ?> MYSQL支持: <?php echo function_exists (mysql_close)?"是":"否"; ?> MySQL数据库持续连接 : <?php echo @get_cfg_var("mysql.allow

shell脚本获取随机数random

用C提供的取随机数的方法srand和rand, 前者是给后者设置随机数种子seed. int rnd_num = 0; srand(seed); // time(NULL) 通常使用时间做种子 rnd_num = rand(); // 产生随机数 产生种子的方法: 1. 使用日期时间 时间作为种子很简单,取当前日期和时间,但是存在一个陷阱:当多台机器并发执行产生随机数时,出现相同随机数的概率非常高.不推荐这种方式 2. 使用$RANDOM 需要系统支持,通过echo来检测, 打印出一个随机数字,

Shell下获取Android设备信息

使用adb.exe shell进入shell界面,然后通过下列命令即可获取需要的信息 :) 1 // getprop命令可获取很多信息哟 2 // 1.获取厂商名称 3 getprop ro.product.brand 4 // 2.设备型号 5 getprop ro.product.model 6 // 3.安卓版本 7 getprop ro.build.version.release 8 // 4.网卡名称 9 wifi.interface 10 // 5.Google glass系统版本

对于shell脚本获取参数的一些小技巧

问题如下: 根据脚本参数的个数$#进行一个循环,在依次输出每个参数$1 $2 $3...... 我有一个循环变量i $i  取到这时的i为1,我想使用这个1再去调用$1,也是就是打印出第一个参数 就是$($i)的意思来取到第几个参数,当然$($i)是不好用的 当时纠结了好久,最后上百度提问,两位高手给出了答案: 1) #!/bin/sh NUMBER=$# echo $NUMBER i=1 while [ $i -le $NUMBER ] do a[$i]=$1 #将数组a[i]赋值为$1,即取