SSH登录服务器发送提醒

当有人登录服务器后,如何感知?本文讲述当有人通过SSH登录服务器后,将登录信息发送到微信企业号。

shell

先创建shell脚本,用于获取登录信息。

#!/bin/bash
#获取登录者的用户名
#user=$USER
user=$(getent passwd `who` | head -n 1 | cut -d : -f 1)
if [ "" = "$user" ]; then
   user="default"
fi
#获取登录者的IP地址
ip=${SSH_CLIENT%% *}
echo $ip
if [ "$ip" = "" ]; then
   ip="default"
fi
#获取登录的时间
time=$(date +%F-%k:%M)
#服务器的IP地址
server=`ifconfig eth1|sed -n '2p'|awk -F ":" '{print $2}'|awk '{print $1}'`
if [ "$server" = "" ]; then
   server="default"
fi
python /etc/ssh/a.py $user $ip $time $server

python

创建python代码,用于将信息发送到企业号上。上面的shell脚本调用该python程序。企业号的信息填充到init中。如果不想用企业号,也可以使用邮件。以前最方便的是直接使用方糖,但被大家玩坏了。

## 微信推送脚本

import requests
import json
import sys

class Wechat_Info():
    """
    微信推送
    """

    def __init__(self):

        self.partyID = '1'
        self.corpID = '**'
        self.secret = '**'
        self.agentID = '**'

    def __get_token(self, corpid, secret):

        Url = "https://qyapi.weixin.qq.com/cgi-bin/gettoken"
        Data = {
            "corpid": corpid,
            "corpsecret": secret
        }
        r = requests.get(url=Url, params=Data)
        token = r.json()['access_token']

        return token

    def send_message(self, message, messagetype): # text textcard markdown

        token = self.__get_token(self.corpID, self.secret)

        url = f"https://qyapi.weixin.qq.com/cgi-bin/message/send?access_token={token}"

        data = {
            "toparty": self.partyID,
            "msgtype": messagetype,
            "agentid": self.agentID,
            messagetype: {
                "content": message
            },
            "safe": "0"
        }

        result = requests.post(url=url, data=json.dumps(data))

        return result.text

    def send_file(self, path, filetype):   # image, vioce, video, file

        token = self.__get_token(self.corpID, self.secret)

        post_url = f"https://qyapi.weixin.qq.com/cgi-bin/media/upload?access_token={token}&type={filetype}"
        data = {"media": open(path, 'rb')}

        r = requests.post(url=post_url, files=data)
        media_id = r.json()['media_id']

        url = f"https://qyapi.weixin.qq.com/cgi-bin/message/send?access_token={token}"

        data = {
            "toparty": self.partyID,
            "msgtype": filetype,
            "agentid": self.agentID,
            filetype : {
                "media_id" : media_id
            },
            "safe": "0"
        }

        result = requests.post(url=url, data=json.dumps(data))

        return result.text

if __name__ == '__main__':
    user = sys.argv[1]
    ip = sys.argv[2]
    time = sys.argv[3]
    server = sys.argv[4]
    msg = f"用户{user}{time}登录{ip}服务为{server}"
    print(msg)

    wechat_info = Wechat_Info()
    result = wechat_info.send_message(msg,"text")
    print(result)

操作

系统层面

将上述sh文件命名为sshrc,将sh文件和python文件放到系统的/etc/ssh/ 目录下。

用户层面

如果只关注指定用户,可将文件放到如下目录:

  • Linux用户登陆都会执行/etc/profile文件

  • Ubuntu/Debian系统环境 编辑根目录下 ~/.bashrc文件

  • CentOS系统 编辑 ~/.bash_profile文件

添加代码:

sh shell文件名

资料

  1. CentOS开启SSH登录后的微信消息推送

  2. 【CentOS】 Linux 7.4.1708 (Core)系统远程登陆服务器时发送邮件提醒

  3. linux shell脚本将命令执行结果赋值给变量

最后

大家如果喜欢我的文章,可以关注我的公众号(程序员麻辣烫)

我的个人博客为:https://shidawuhen.github.io/

往期文章回顾:

  1. 设计模式

  2. 招聘

  3. 思考

  4. 存储

  5. 算法系列

  6. 读书笔记

  7. 小工具

  8. 架构

  9. 网络

  10. Go语言

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值