From e05d20c9e7cea515d3bc2b3016e6c16829bb5a97 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=B6rg=20Sachse?= <joerg.sachse@slub-dresden.de> Date: Tue, 6 May 2025 15:19:39 +0200 Subject: [PATCH] feat: use SSH control socket for connection to NetApp in order to reduce SSH connection overhead there and improve plugin reliability --- .../local/600/check_netapp_nfs_shares.sh | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) 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 a88ed3d..521b3a7 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 -- GitLab