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