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机器人就会向你发送登录信息了
评论