add check_ssh
This commit is contained in:
parent
284843c174
commit
ad238d728b
|
@ -387,7 +387,7 @@ fi
|
|||
|
||||
|
||||
RESPONSE_TIME_MS=$(echo "$RESPONSE_TIME * 1000" | bc | xargs printf "%0.0f\n")
|
||||
perfdata="response_time=${RESPONSE_TIME_MS}ms;$WARN_TIME;$CRIT_TIME;0;;"
|
||||
perfdata="response_time=${RESPONSE_TIME_MS}ms;${WARN_TIME};${CRIT_TIME};0;;"
|
||||
|
||||
# Check response time
|
||||
if [ $(echo "$RESPONSE_TIME_MS > $CRIT_TIME" | bc) -eq 1 ]; then
|
||||
|
|
|
@ -0,0 +1,92 @@
|
|||
#!/bin/bash
|
||||
|
||||
# Default values
|
||||
HOST=""
|
||||
PORT=22
|
||||
PASSWORD=""
|
||||
SSH_KEY=""
|
||||
USERNAME=""
|
||||
TIMEOUT=10
|
||||
WARNING=3
|
||||
CRITICAL=5
|
||||
MODE="auth"
|
||||
|
||||
# Usage instructions
|
||||
usage() {
|
||||
echo "Usage: $0 -H <host> -u <username> [-p <password> | -k <ssh_key>] [-P <port>] [-t <timeout>] [-w <warning>] [-c <critical>] [-m <mode>]"
|
||||
echo
|
||||
echo " -H <host> : SSH server hostname or IP address"
|
||||
echo " -u <username> : SSH username"
|
||||
echo " -p <password> : SSH password (optional if using SSH key)"
|
||||
echo " -k <ssh_key> : Path to SSH private key (optional. \$HOME/.ssh/id_rsa is used by default)"
|
||||
echo " -P <port> : SSH port (default: 22)"
|
||||
echo " -t <timeout> : Connection timeout in seconds (default: 10)"
|
||||
echo " -w <warning> : Warning threshold for connection time in seconds (default: 3)"
|
||||
echo " -c <critical> : Critical threshold for connection time in seconds (default: 5)"
|
||||
echo " -m <mode> : Mode for testing ('auth' or 'conn', default: 'auth'. If one mode fails, try the other)"
|
||||
echo
|
||||
exit 3
|
||||
}
|
||||
|
||||
# Parse arguments
|
||||
while getopts "H:P:p:k:u:t:w:c:m:" opt; do
|
||||
case $opt in
|
||||
H) HOST="$OPTARG" ;;
|
||||
P) PORT="$OPTARG" ;;
|
||||
p) PASSWORD="$OPTARG" ;;
|
||||
k) SSH_KEY="$OPTARG" ;;
|
||||
u) USERNAME="$OPTARG" ;;
|
||||
t) TIMEOUT="$OPTARG" ;;
|
||||
w) WARNING="$OPTARG" ;;
|
||||
c) CRITICAL="$OPTARG" ;;
|
||||
m) MODE="$OPTARG" ;;
|
||||
*) usage ;;
|
||||
esac
|
||||
done
|
||||
|
||||
# Check if required arguments are provided
|
||||
if [ -z "$HOST" ] || [ -z "$USERNAME" ]; then
|
||||
usage
|
||||
fi
|
||||
|
||||
# Use default SSH key if not specified
|
||||
if [ -z "$SSH_KEY" ]; then
|
||||
SSH_KEY="$HOME/.ssh/id_rsa"
|
||||
fi
|
||||
|
||||
# Check connection
|
||||
START_TIME=$(date +%s%N)
|
||||
if [ -z "$PASSWORD" ]; then
|
||||
if [ "$MODE" == "auth" ]; then
|
||||
OUTPUT=$(ssh -q -o ConnectTimeout=$TIMEOUT -o StrictHostKeyChecking=no -o BatchMode=yes -i $SSH_KEY -p $PORT $USERNAME@$HOST "echo success" 2>&1); rc=$?
|
||||
else
|
||||
OUTPUT=$(ssh -q -o ConnectTimeout=$TIMEOUT -o StrictHostKeyChecking=no -o BatchMode=yes -o ProxyCommand="nc -w $TIMEOUT %h %p" -i $SSH_KEY -p $PORT $USERNAME@$HOST 2>&1); rc=$?
|
||||
fi
|
||||
else
|
||||
if [ "$MODE" == "auth" ]; then
|
||||
OUTPUT=$(sshpass -p "$PASSWORD" ssh -q -o ConnectTimeout=$TIMEOUT -o StrictHostKeyChecking=no -o BatchMode=yes -p $PORT $USERNAME@$HOST "echo success" 2>&1); rc=$?
|
||||
else
|
||||
OUTPUT=$(sshpass -p "$PASSWORD" ssh -q -o ConnectTimeout=$TIMEOUT -o StrictHostKeyChecking=no -o BatchMode=yes -o ProxyCommand="nc -w $TIMEOUT %h %p" -p $PORT $USERNAME@$HOST 2>&1); rc=$?
|
||||
fi
|
||||
fi
|
||||
END_TIME=$(date +%s%N)
|
||||
ELAPSED_TIME=$(echo "scale=3; ($END_TIME - $START_TIME) / 1000000000" | bc)
|
||||
ELAPSED_TIME_MS=$(echo "scale=0; ($END_TIME - $START_TIME) / 1000000" | bc)
|
||||
|
||||
# Check result
|
||||
perfdata="response_time=${ELAPSED_TIME_MS}ms;${WARNING};${CRITICAL};0;;"
|
||||
if [[ $MODE == "auth" && $OUTPUT == "success" ]] || [[ $MODE == "conn" && $rc -eq 0 ]]; then
|
||||
if (( $(echo "$ELAPSED_TIME > $CRITICAL" | bc -l) )); then
|
||||
echo "CRITICAL - connected to $HOST in $ELAPSED_TIME seconds | $perfdata"
|
||||
exit 2
|
||||
elif (( $(echo "$ELAPSED_TIME > $WARNING" | bc -l) )); then
|
||||
echo "WARNING - connected to $HOST in $ELAPSED_TIME seconds | $perfdata"
|
||||
exit 1
|
||||
else
|
||||
echo "OK - connected to $HOST in $ELAPSED_TIME seconds | $perfdata"
|
||||
exit 0
|
||||
fi
|
||||
else
|
||||
echo -e "CRITICAL - failed to connect to $HOST. Return code was $rc\n$OUTPUT"
|
||||
exit 2
|
||||
fi
|
Loading…
Reference in New Issue