今天帮一个网友修改一个脚本,顺便抄了作业
人狠话不多,直接上代码
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31
| #!/bin/bash
name=`hostname` ip=$(ip addr | grep inet | grep -v inet6 | sed -n 2p | awk '{print $2}' |awk -F "/" '{print $1}') user=$USER _ip=${SSH_CLIENT%% *} _time=`date '+%Y-%m-%d-%H:%M:%S'`
ipaddress=`curl -q -s https://www.36ip.cn/?ip=$_ip`
addr=`echo $ipaddress | sed '/ \+/s//|/g'` echo $ip $user $name $addr
function SendMessageToDingding(){
url="https://oapi.dingtalk.com/robot/send?access_token=xxxx"
res=`curl -X POST -s -L -H "Content-Type:application/json" -H "charset:utf-8" $url -d " { \"msgtype\": \"text\", \"text\": { \"content\": \" $1\n 主机名称:$2\n 主机 IP:$3\n 登录用户:$4\n 登录 IP:$5\n IP 归属地:$6\n 登录时间:$7 \" } }"`
} body="服务器 SSH 登录提示"
SendMessageToDingding $body $name $ip $user $_ip $addr $_time
|
这个其实在很多公司里面还是很常见的需求,当服务器被登录的时候,给运维人员或者管理人员发消息,当然,不止于钉钉,也可以是邮箱,或者一些自己公司内部的接口,通信软件等等。
弄这个的时候发现一个 zshrc 的小问题
当我把脚本放在~/.zshrc
里面执行的时候会报一个no matches found:
的错误,解决办法是
在执行脚本之前添加setopt no_nomatch