#!/bin/sh

UNKNOWN=3

cmd=
hostname=
timeout=10

while getopts c:h:t: name
do
    case $name in
        c) cmd=$OPTARG ;;
        h) hostname=$OPTARG ;;
        t) timeout=$OPTARG ;;
    esac
done

if [ -z "$cmd" ]
then
    echo 'check_by_sshmon: Option "-c $cmd" missing' >&2
    exit $UNKNOWN
fi

if [ -z "$hostname" ]
then
    echo 'check_by_sshmon: Option "-h $hostname" missing' >&2
    exit $UNKNOWN
fi

timeout "$timeout" \
    ssh sshmon@"$hostname" \
        -o IdentityFile=/etc/sshmon.priv \
        -o StrictHostKeyChecking=accept-new \
        -o ControlMaster=auto \
        -o ControlPath=~/master-%C \
        -o ControlPersist=30m \
        -o HashKnownHosts=no \
        "$cmd"
exitcode=$?

if [ "$exitcode" = 124 ]
then
    echo 'check_by_sshmon: Timeout while running check remotely' >&2
    exit $UNKNOWN
elif [ "$exitcode" = 255 ]
then
    echo 'check_by_sshmon: SSH error' >&2
    exit $UNKNOWN
else
    exit $exitcode
fi