linux当中的远程控制在自动化运维中起到了很大的作用,你可以完成在一台机器上对另一台机器的操作以及监控,今天主要是用脚本来实现对远程虚拟机CPU等信息的监控。开始写脚本之前我们需要解决两个问题
问题一
如何远程连接到服务器
这里我们采用的是ssh进行连接
命令格式:
ssh -p $port $user@$ip 'cmd'
或者 ssh -t $usr@ip 'cmd'
$port : ssh连接端口号
$user: ssh连接用户名
$ip:ssh连接的ip地址
cmd:远程服务器需要执行的操作
采用命令执行过程中会让输入密码,可以采用密钥的方式省去输入密码这一步骤
如何设置密钥
有机器A(192.168.1.155),B(192.168.1.181)。现想A通过ssh免密码登录到B。
首先以root账户登陆为例。
1.在A机下生成公钥/私钥对。
[root@A ~]# ssh-keygen -t rsa -P ‘’
-P表示密码,-P ‘’ 就表示空密码,也可以不用-P参数,这样就要三车回车,用-P就一次回车。
命令将在/root/.ssh目录下面产生一对密钥id_rsa和id_rsa.pub。
一般采用的ssh的rsa密钥:
id_rsa 私钥
id_rsa.pub 公钥
下述命令产生不同类型的密钥
ssh-keygen -t dsa
ssh-keygen -t rsa
ssh-keygen -t rsa1
2.把A机下的/root/.ssh/id_rsa.pub 复制到B机的 /root/.ssh/authorized_keys文件里,先要在B机上创建好 /root/.ssh 这个目录,用scp复制。
[root@A ~]# scp /root/.ssh/id_rsa.pub root@192.168.1.181:/root/.ssh/authorized_keys
root@192.168.1.181’s password:
id_rsa.pub 100% 223 0.2KB/s 00:00
由于还没有免密码登录的,所以要输入一次B机的root密码。
3.authorized_keys的权限要是600!!!
[root@B ~]# chmod 600 /root/.ssh/authorized_keys
问题二 如何实现发送邮件的功能
这里使用mail实现发送邮件的功能
下载mailx
yum -y install mailx
yum -y install sendmail
下载完成以后需要配置/etc/mail.rc文件
vi /etc/mail.rc
=在配置文件中添加下面的信息=
set from=921730779@qq.com 发送端
set smtp=smtp.qq.com 固定值也可以是smtp.163.com
set smtp-auth-user=921730779@qq.com 用户的邮箱账号
set smtp-auth-password=qbwecjkddjhibfif 用户邮箱的授权码,可以在qq邮箱的设置>账号中开启
set smtp-auth=login
配置文件设置完毕就可以发送邮件了
参数 | 说明 |
---|---|
-b address | 指定密件副本的收信人地址 |
-c address | 指定副本的收信人地址 |
-f [file] | 读取指定邮件文件中的邮件 |
-i | 忽略终端发出的信息 |
-I | 使用互动模式 |
-n | 启动时禁止读取 /etc/mail.rc |
-N | 阅读邮件时,不显示邮件的标题 |
-s subject | 指定邮件的主题 |
-t | 要发送的消息应包含带有 To:、Cc:、或 Bcc: 字段的消息头,在命令行上指定的收件人将被忽略。 |
-u user | 读取指定用户的邮件 |
-v | 执行时,显示详细的信息 |
-V | 显示版本信息并退出 |
发送邮件
1.标准输入录入邮件信息
直接把当前 shell 当成编辑器来用,可以输入正文,当邮件正文输入完成后,需要按 Ctrl+D 结束输入。
[root@localhost ~]# mail -s "邮件主题" 123456@qq.com
hello # 邮件正文
world # 邮件正文
EOT # 按 Ctrl+D
2.管道方式
[root@localhost ~]# echo “邮件正文” | mail -s “邮件主题” 123456@qq.com
以文件 file.txt 的内容为邮件正文发送。
[root@localhost ~]# cat file.txt | mail -s “邮件主题” 123456@qq.com
3.文件重定向
以文件 file.txt 的内容为邮件正文发送。
[root@localhost ~]# mail -s “邮件主题” 123456@qq.com < file.txt
注意点
我们在用163邮箱发送邮件时如何邮件内容不合理会被163邮箱的反垃圾机制阻拦,导致邮件的发送失败,这时可以修改邮件内容或者换QQ邮箱进行发送
脚本文件
#! /bin/bash
#获取CPU等信息的函数
info_get(){
cpuUse=`top -n 1 | awk -F '[ %]+' 'NR==3 {print $3}'` | awk -F '.' "{print $2}"
mem_total=`free -m | awk -F '[ :]+' 'NR==2{print $2}'`
mem_used=`free -m | awk -F '[ :]+' 'NR==2{print $3}'`
mem_used2=`awk 'BEGIN{printf "%.0f\n",('$mem_used'/'$mem_total')*100}'`
data_name="/dev/sda1"
disk_used=`df -h | grep $data_name | awk -F '[ %]+' '{print $5}'`
}
#进行连接的函数
connect()
{
ssh -t root@$192.168.0.195
}
#发送邮件的函数
send(){
connect
info_get
#设置判断语句当Cpu等信息达到所监控的值时发送信息
if [[ $cpuUse > 0.6 ]];then
echo "警告,你现在的CPU已经使用$cpuUse,请赶快处理" | mail -s "警告" 921730779@qq.com
elif [[ $mem_used2 > 10 ]];then
echo "警告,你所监控的内存已经使用$mem_used2,请赶快处理" | mail -s "警告" 921730779@qq.com
elif [[ disk_used > 80 ]];then
echo "警告,你所监控的磁盘已经使用$disk_used,请赶快处理" | mail -s "警告" 921730779@qq.com
else
echo "一切正常"
fi
}
send
总结
这个脚本文件是从一台主机上运行脚本文件来实现对远程liunx机器的监控,也可以用过在远程运行脚本文件实现监控,具体方法还在研究