ssh域名过期,消息推送到企业微信
1.shell脚本
#!/bin/bash# ================= 配置区域 =================
# 企业微信机器人 webhook key
WEBHOOK_KEY="xxxxxx"# 检测的域名列表(一行一个)
DOMAINS=("vip.xxx.com:443""oa.xxxx.com:443"
)# 提前多少天提醒(默认30天)
WARN_DAYS=30# 临时文件(用于存储结果)
TEMP_FILE="/tmp/ssl_check_result_$(date +%s).md"# ================= 函数:获取证书过期时间 =================
get_cert_expiry() {local domain=$1local port=${2:-443}# 使用 openssl 获取证书信息expiry_date=$(echo | openssl s_client -servername "$domain" -connect "$domain:$port" 2>/dev/null | \openssl x509 -noout -enddate 2>/dev/null | \cut -d= -f2)if [ -z "$expiry_date" ]; thenecho "ERROR: 无法获取证书信息"return 1fi# 转换为时间戳expiry_timestamp=$(date -d "$expiry_date" +%s 2>/dev/null)if [ $? -ne 0 ]; thenecho "ERROR: 日期解析失败: $expiry_date"return 1fiecho $expiry_timestamp
}# ================= 函数:发送企业微信消息 =================
send_wechat_msg() {local content="$1"curl -s -X POST "https://qyapi.weixin.qq.com/cgi-bin/webhook/send?key=$WEBHOOK_KEY" \-H "Content-Type: application/json" \-d "{\"msgtype\": \"markdown\",\"markdown\": {\"content\": \"$content\"}}"
}# ================= 主程序 =================
echo "# 📅 SSL 证书到期检测报告 $(date +'%Y-%m-%d %H:%M')" > "$TEMP_FILE"
echo "" >> "$TEMP_FILE"
echo "## 检测域名列表:" >> "$TEMP_FILE"
echo "" >> "$TEMP_FILE"WARN_FLAG=0for item in "${DOMAINS[@]}"; doIFS=':' read -r domain port <<< "$item"port=${port:-443}echo "- \`$domain:$port\`" >> "$TEMP_FILE"expiry_ts=$(get_cert_expiry "$domain" "$port")if [[ $? -ne 0 ]] || [[ -z "$expiry_ts" ]]; thenecho " - ❌ 获取证书失败" >> "$TEMP_FILE"WARN_FLAG=1continuefinow_ts=$(date +%s)remain_days=$(( (expiry_ts - now_ts) / 86400 ))if [ $remain_days -le $WARN_DAYS ] && [ $remain_days -ge 0 ]; thenecho " - ⚠️ **即将过期:剩余 $remain_days 天**" >> "$TEMP_FILE"WARN_FLAG=1elif [ $remain_days -lt 0 ]; thenecho " - ❗ **已过期:$(( -remain_days )) 天前**" >> "$TEMP_FILE"WARN_FLAG=1elseecho " - ✅ 正常:剩余 $remain_days 天" >> "$TEMP_FILE"fi
doneecho "" >> "$TEMP_FILE"
if [ $WARN_FLAG -eq 1 ]; thenecho "> 💡 **请尽快处理即将过期或已过期的证书!**" >> "$TEMP_FILE"
elseecho "> ✅ 所有证书均在安全期内。" >> "$TEMP_FILE"
fi# 读取内容并转义换行符和引号,适配 JSON
CONTENT=$(sed ':a;N;$!ba;s/\n/\\n/g;s/"/\\"/g' "$TEMP_FILE")# 发送消息
send_wechat_msg "$CONTENT"# 清理临时文件
rm -f "$TEMP_FILE"
2.赋予脚本执行权限
chmod +x check_ssl_cert.sh
3.配置定时任务(crontab)
crontab -e# 每天早上10执行
0 10 * * * /bin/bash /home/check_ssl_cert.sh
4.测试运行
手动运行一次测试:
./check_ssl_cert.sh
5.结果
📅 SSL 证书到期检测报告 2025-09-10 10:00## 检测域名列表:- `example.com:443`- ⚠️ **即将过期:剩余 25 天**
- `google.com:443`- ✅ 正常:剩余 89 天
- `github.com:443`- ✅ 正常:剩余 365 天> 💡 **请尽快处理即将过期或已过期的证书!**
6.注意事项
- 确保服务器能访问外网和目标域名的 443 端口
- 确保安装了
openssl
和curl
# Ubuntu/Debian sudo apt update && sudo apt install openssl curl -y# CentOS/RHEL sudo yum install openssl curl -y
- 企业微信机器人 Webhook Key 需要保密,不要提交到 Git
- 如需支持中文域名或 SNI,脚本已内置
-servername
参数支持
7.可选增强功能
- ✅ 添加日志记录到文件
- ✅ 支持从文件读取域名列表
- ✅ 支持钉钉、飞书等多平台推送
- ✅ 支持证书颁发者、签发时间等详细信息