diff --git a/files/usr/lib/check_mk_agent/local/600/check_netapp_nfs_shares.sh b/files/usr/lib/check_mk_agent/local/600/check_netapp_nfs_shares.sh index a88ed3d49113246c1f13eec18347bb8c6263e69a..521b3a70bc5683fb925f03de302d4da490c39ab3 100755 --- a/files/usr/lib/check_mk_agent/local/600/check_netapp_nfs_shares.sh +++ b/files/usr/lib/check_mk_agent/local/600/check_netapp_nfs_shares.sh @@ -78,11 +78,15 @@ function help () { # IMPORTANT: Set lock using "flock", NOT "touch"!!! It's atomic and doesn't have to be cleared after the script ran. ( -flock -n 9 || exit 1 +flock -E 100 -n 9 || exit 1 NFS_SHARES=$( findmnt --raw --noheadings --types "nfs4" | cut -d " " -f 2 ) + SSH_CONTROL_PATH='/tmp/ssh-%r-%h-%p' + # create SSH control socket + ssh -fN -o StrictHostKeyChecking=no -oControlMaster=yes -oControlPath="${SSH_CONTROL_PATH}" -oControlPersist=60 -i "${IDENTITY_FILE}" "${SSH_USER}"@"${MGMT}" for SHARE in ${NFS_SHARES}; do NETAPP_VOLUME=$( echo "${SHARE}" | cut -d ":" -f 2 | cut -d '/' -f 3 ) - RESULT=$( ssh -o StrictHostKeyChecking=no "${SSH_USER}"@"${MGMT}" -C -i "${IDENTITY_FILE}" "${NETAPP_SETTINGS} volume show -vserver ${NETAPP_VSERVER} -volume ${NETAPP_VOLUME} -fields $NETAPP_FIELDS" ) + # use SSH control socket to run commands over existing connection + RESULT=$( ssh -o StrictHostKeyChecking=no -oControlMaster=no -oControlPath="${SSH_CONTROL_PATH}" -i "${IDENTITY_FILE}" "${SSH_USER}"@"${MGMT}" -t "${NETAPP_SETTINGS} volume show -vserver ${NETAPP_VSERVER} -volume ${NETAPP_VOLUME} -fields $NETAPP_FIELDS" ) [[ -z "${RESULT}" ]] && echo "Didn't get a valid answer from NetApp system for ${NETAPP_VOLUME}." RESULT=$( echo "${RESULT}" | tail -n 2 | tr -d '\r' ) OLDIFS=${IFS} @@ -96,6 +100,8 @@ flock -n 9 || exit 1 done IFS=${OLDIFS} done + # close SSH control socket + ssh -o StrictHostKeyChecking=no -S "${SSH_CONTROL_PATH}" -i "${IDENTITY_FILE}" "${SSH_USER}"@"${MGMT}" -O exit ) 9>"${LOCKFILE}" # Code checked by shellcheck (https://github.com/koalaman/shellcheck) on 2021-02-19