|
```bash
#!/usr/bin/env bash
# This script alerts on SSH login via /etc/profile.d/sshd_telegram.sh and monitors bandwidth usage.
# Adapted from: https://github.com/MyTheValentinus/ssh-login-alert-telegram
# Define your USERID (Telegram chat ID), KEY (Telegram bot API key), VPSNAME (server name), PFTIME (interval in seconds), LIMIT and LIMIT2 (bandwidth thresholds in GB).
USERID="Your_Telegram_ID_here"
KEY="Your_Bot_Key_Here"
VPSNAME="ali-hk1"
LIMIT=150
LIMIT2=160
PFTIME=1800
# Loop through USERIDs
for i in $USERID
do
URL="https://api.telegram.org/bot$KEY/sendMessage"
DATE="$(date "+%Y-%m-%d %H:%M:%S")"
INTERFACE="eth0"
SRV_HOSTNAME=$(hostname -f)
# Fetch current traffic data in KB
VNSTAT_JSON=$(vnstat -i $INTERFACE --json)
RX=$(echo $VNSTAT_JSON | jq -r '.interfaces[0].traffic.total.rx')
TX=$(echo $VNSTAT_JSON | jq -r '.interfaces[0].traffic.total.tx')
# Ensure RX and TX are valid numbers
if ! [[ $RX =~ ^[0-9]+$ ]] || ! [[ $TX =~ ^[0-9]+$ ]]; then
exit 1
fi
# Calculate total traffic in GB
TOTAL=$(echo "scale=2; ($RX + $TX) / 1024 / 1024" | bc)
RX_GB=$(echo "scale=2; $RX / 1024 / 1024" | bc)
TX_GB=$(echo "scale=2; $TX / 1024 / 1024" | bc)
# Timestamp management
current_time=$(date +%s)
timestamp_file="/usr/unitls/last_exec_time.txt"
if [ -f "$timestamp_file" ]; then
last_exec_time=$(cat "$timestamp_file")
else
touch $timestamp_file
echo "Timestamp file created."
fi
time_diff=$((current_time - last_exec_time))
# Check and act based on traffic
if (( $(echo "$RX_GB >= $LIMIT2" | bc -l) )) || (( $(echo "$TX_GB >= $LIMIT2" | bc -l) )); then
TEXT="${VPSNAME}(${SRV_HOSTNAME}) Traffic Usage:\nInbound: *$RX_GB*\nOutbound: *$TX_GB*\nTime: $DATE\nExceeded 160GB, shutting down."
curl -s -d "chat_id=$i&text=$TEXT&disable_web_page_preview=true&parse_mode=markdown" $URL > /dev/null
sudo shutdown -h now
elif (( $(echo "$RX_GB >= $LIMIT" | bc -l) )) || (( $(echo "$TX_GB >= $LIMIT" | bc -l) )); then
TEXT="${VPSNAME}(${SRV_HOSTNAME}) Traffic Usage:\nInbound: *$RX_GB*\nOutbound: *$TX_GB*\nTime: $DATE\nExceeded 150GB, nearing 160GB."
curl -s -d "chat_id=$i&text=$TEXT&disable_web_page_preview=true&parse_mode=markdown" $URL > /dev/null
else
if (( time_diff >= PFTIME )); then
echo "$current_time" > "$timestamp_file"
TEXT="${VPSNAME}(${SRV_HOSTNAME}) Traffic Usage:\nInbound: *$RX_GB*\nOutbound: *$TX_GB*\nTime: $DATE\nUsage within limits."
curl -s -d "chat_id=$i&text=$TEXT&disable_web_page_preview=true&parse_mode=markdown" $URL > /dev/null
fi
fi
done
# The system will shut down if either inbound or outbound traffic exceeds 160GB, sending a notification to the Telegram bot. The script runs every minute, checking for overages and sending updates every 30 minutes if no overage has occurred.
# Dependencies: vnstat, jq, and bc must be installed. vnstat is configured to record data every minute.
``` |
|