Files
my-project/config/openclaw/scripts/ssl-monitor.sh
T

101 lines
3.1 KiB
Bash
Executable File

#!/bin/bash
# 网站SSL证书监控脚本
# 检测 hqbnb.com, hqbsh.com, szbjb.com, hqbsh.net, sjpdd.com 的HTTPS支持和证书有效期
# Telegram配置 (1号机token)
TELEGRAM_TOKEN="8529719199:AAGjLDflvMXAEdgrBTSBEczOoSMybLU4gcs"
TELEGRAM_CHAT_ID="5117446326"
# 监控网站列表
WEBSITES=("hqbnb.com" "hqbsh.com" "szbjb.com" "hqbsh.net" "sjpdd.com")
# 告警阈值(天数)
WARNING_DAYS=7
# 日志文件
LOG_FILE="/root/.openclaw/logs/ssl-monitor.log"
log() {
echo "[$(date '+%Y-%m-%d %H:%M:%S')] $1" | tee -a "$LOG_FILE"
}
send_telegram() {
local message="$1"
curl -s -X POST "https://api.telegram.org/bot${TELEGRAM_TOKEN}/sendMessage" \
-d "chat_id=${TELEGRAM_CHAT_ID}" \
-d "text=${message}" \
-d "parse_mode=HTML" > /dev/null 2>&1
}
check_ssl() {
local domain="$1"
local result=""
# 提取证书信息
cert_info=$(echo | openssl s_client -servername "$domain" -connect "$domain":443 2>/dev/null | openssl x509 -noout -dates -subject 2>/dev/null)
if [ $? -ne 0 ]; then
echo "HTTPS_ERROR|$domain|无法连接到443端口"
return 1
fi
end_date=$(echo "$cert_info" | grep "notAfter" | cut -d= -f2)
end_date_epoch=$(date -d "$end_date" +%s 2>/dev/null)
current_epoch=$(date +%s)
days_left=$(($end_date_epoch - $current_epoch) / 86400 )
subject=$(echo "$cert_info" | grep "subject=" | cut -d= -f2-)
http_status=$(curl -s -o /dev/null -w "%{http_code}" -L --connect-timeout 10 "https://$domain" 2>/dev/null)
if [ "$http_status" == "200" ] || [ "$http_status" == "301" ] || [ "$http_status" == "302" ]; then
echo "HTTPS_OK|$domain|$days_left|$subject|$http_status"
return 0
else
echo "HTTPS_ERROR|$domain|HTTP状态码:$http_status"
return 1
fi
}
log "========== SSL证书检测开始 =========="
alert_message=""
success_count=0
error_count=0
for site in "${WEBSITES[@]}"; do
log "检测网站: $site"
result=$(check_ssl "$site")
status=$(echo "$result" | cut -d'|' -f1)
domain=$(echo "$result" | cut -d'|' -f2)
days_left=$(echo "$result" | cut -d'|' -f3)
subject=$(echo "$result" | cut -d'|' -f4)
http_code=$(echo "$result" | cut -d'|' -f5)
if [ "$status" == "HTTPS_OK" ]; then
success_count=$($success_count + 1)
log "✅ $site: HTTPS正常,证书还有 ${days_left} 天过期"
if [ "$days_left" -lt "$WARNING_DAYS" ]; then
log "⚠️ $site: 证书即将过期!仅剩 ${days_left} 天"
alert_message="${alert_message}⚠️ <b>$site</b> 证书即将过期 (${days_left}天)\n"
fi
else
error_count=$($error_count + 1)
log "❌ $site: HTTPS异常 - $result"
alert_message="${alert_message}❌ <b>$site</b> HTTPS异常: $result\n"
fi
done
log "检测完成: $success_count 成功, $error_count 错误"
if [ -n "$alert_message" ]; then
alert_message="🔔 <b>SSL证书监控告警</b>\n\n${alert_message}---\n检测时间: $(date '+%Y-%m-%d %H:%M:%S')"
log "发送Telegram告警..."
send_telegram "$alert_message"
fi
log "========== SSL证书检测完成 =========="
echo ""