You've already forked nrpe
add ssl discover check
This commit is contained in:
@@ -0,0 +1,73 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
# Default thresholds (in days)
|
||||||
|
WARN_DAYS=30
|
||||||
|
CRIT_DAYS=15
|
||||||
|
|
||||||
|
# Nagios Exit Codes
|
||||||
|
STATE_OK=0
|
||||||
|
STATE_WARNING=1
|
||||||
|
STATE_CRITICAL=2
|
||||||
|
STATE_UNKNOWN=3
|
||||||
|
|
||||||
|
usage() {
|
||||||
|
echo "Usage: $0 -p <path1,path2> [-w <warn_days>] [-c <crit_days>]"
|
||||||
|
exit $STATE_UNKNOWN
|
||||||
|
}
|
||||||
|
|
||||||
|
# Parse arguments
|
||||||
|
while getopts "p:w:c:" opt; do
|
||||||
|
case $opt in
|
||||||
|
p) IFS=',' read -ra PATHS <<< "$OPTARG" ;;
|
||||||
|
w) WARN_DAYS=$OPTARG ;;
|
||||||
|
c) CRIT_DAYS=$OPTARG ;;
|
||||||
|
*) usage ;;
|
||||||
|
esac
|
||||||
|
done
|
||||||
|
|
||||||
|
if [[ -z "${PATHS[*]}" ]]; then usage; fi
|
||||||
|
|
||||||
|
# Variables to track overall status
|
||||||
|
final_status=$STATE_OK
|
||||||
|
output_msg=""
|
||||||
|
|
||||||
|
for search_path in "${PATHS[@]}"; do
|
||||||
|
if [[ ! -d "$search_path" ]]; then
|
||||||
|
output_msg+="Path $search_path not found; "
|
||||||
|
final_status=$STATE_UNKNOWN
|
||||||
|
continue
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Find common cert extensions
|
||||||
|
certs=$(find "$search_path" -type f \( -name "*.crt" -o -name "*.pem" \))
|
||||||
|
|
||||||
|
for cert in $certs; do
|
||||||
|
# Extract expiration date using openssl
|
||||||
|
expiry_date=$(openssl x509 -enddate -noout -in "$cert" 2>/dev/null | cut -d= -f2)
|
||||||
|
|
||||||
|
if [[ -z "$expiry_date" ]]; then continue; fi
|
||||||
|
|
||||||
|
# Convert dates to seconds for comparison
|
||||||
|
expiry_epoch=$(date -d "$expiry_date" +%s)
|
||||||
|
now_epoch=$(date +%s)
|
||||||
|
expiry_diff=$(( (expiry_epoch - now_epoch) / 86400 ))
|
||||||
|
|
||||||
|
# Logic for Nagios status
|
||||||
|
if [[ $expiry_diff -le $CRIT_DAYS ]]; then
|
||||||
|
output_msg+="$(basename "$cert") EXPIRES IN $expiry_diff DAYS; "
|
||||||
|
final_status=$STATE_CRITICAL
|
||||||
|
elif [[ $expiry_diff -le $WARN_DAYS ]]; then
|
||||||
|
output_msg+="$(basename "$cert") expires in $expiry_diff days; "
|
||||||
|
[[ $final_status -lt $STATE_WARNING ]] && final_status=$STATE_WARNING
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
done
|
||||||
|
|
||||||
|
# Final Output
|
||||||
|
if [[ $final_status -eq $STATE_OK ]]; then
|
||||||
|
echo "OK: All certificates are valid for more than $WARN_DAYS days."
|
||||||
|
else
|
||||||
|
echo "STATUS: $output_msg"
|
||||||
|
fi
|
||||||
|
|
||||||
|
exit $final_status
|
||||||
Reference in New Issue
Block a user