Python实现电报机器人发送SSH登录通知

Python实现电报机器人发送SSH登录通知

望川
2024-06-27 / 0 评论 / 26 阅读 / 正在检测是否收录...

1、创建一个Python脚本send_message.py

import requests
from urllib.parse import quote
import os
import time
import socket

# 初始化机器人token和chat_id
BOT_TOKEN: str = 填写你的机器人token
CHAT_ID: int = 填写你的chat_id

def getPublicIPs():
    """获取服务器的公网IPv4和IPv6地址

    Returns:
        tuple: (IPv4地址, IPv6地址)
    """
    ipv4 = None
    ipv6 = None

    # 获取IPv4地址
    try:
        s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
        s.connect(('8.8.8.8', 80))
        ipv4 = s.getsockname()[0]
        s.close()
    except Exception:
        ipv4 = None

    # 获取IPv6地址
    try:
        s = socket.socket(socket.AF_INET6, socket.SOCK_DGRAM)
        s.connect(('2001:4860:4860::8888', 80))  # Google Public DNS IPv6 address
        ipv6 = s.getsockname()[0]
        s.close()
    except Exception:
        ipv6 = None

    return (ipv4, ipv6)

def getSSHClientIP():
    """获取登录 SSH 客户端的 IP 地址

    Returns:
        str: 返回登录SSH的IP
    """
    ssh_connection_info = os.getenv('SSH_CONNECTION')
    if ssh_connection_info:
        # SSH_CONNECTION 格式为 "client_IP client_port server_IP server_port"
        parts = ssh_connection_info.split()
        if len(parts) >= 4:
            client_ip = parts[0]
            return client_ip
    return None

def telegramBotSendMessage(bot_token: str,message: str):
    """电报机器人发送消息

    Args:
        bot_token (str): 机器人的api_token
        message (str): 需要机器人发送的消息

    Returns:
        bool: 返回结果
    """
    message = quote(message,safe='')
    chat_id = CHAT_ID
    try:
        requests.get(url=f"https://api.telegram.org/bot{bot_token}/sendMessage?chat_id={chat_id}&text={message}")
        return True
    except Exception as e:
        return False

# 也可以通过getSSHClientIP()获取服务器IP,但是该函数默认返回IPv4地址,getPublicIPs()可以同时返回IPv4地址和IPv6地址(如果服务器有的话)
IPs_tuple = getPublicIPs() # 获取服务器的公网IP

# 构建登录信息
message = f"你的服务器有新的SSH登录:\nIPv4: {IPs_tuple[0]}\nIPv6: {IPs_tuple[1]}\n登录时间: {time.strftime('%Y-%m-%d %H:%M:%S', time.localtime())}\n登录者IP: {getSSHClientIP()}"

# 发送SSH登录通知
telegramBotSendMessage(bot_token=BOT_TOKEN,message=message)

2、将脚本执行命令添加到~/.bashrc文件中

# 打开~/.bashrc
vim ~/.bashrc
# 在~/.bashrc末尾追加一行
python3 /path/to/send_message.py

添加好后保存退出

3、重新加载~/.bashrc

source ~/.bashrc

完成上述所有步骤后,下次进行SSH登录时,你的Telegram机器人就会向你发送登录信息了

0

评论

博主关闭了当前页面的评论