NAME_REPO=borg
 NAME_ARCHIVE=orgdir
 
-if [ -z "${BORG_PASSPHRASE}" ]; then
-    stty -echo
-    printf "Borg passphrase: "
-    read passphrase
-    stty echo
-    printf "\n"
-    export BORG_PASSPHRASE="${passphrase}"
-fi
-
 if [ "$1" = "orgpull" ]; then
     ls -1 "${PATH_BORGKEYS}/" | while read FILENAME; do
         NAME_SERVER=$(echo "${FILENAME}" | sed 's/.*@//')
         if ! ping -c1 -W2 "${NAME_SERVER}" > /dev/null 2>&1; then
             echo "Cannot reach ${NAME_SERVER}, skipping."
-           continue
+            continue
         fi
         REPO="${NAME_SERVER}:${NAME_REPO}"
-       ARCHIVES=$(borg list "${REPO}")  # separate step so we may fail early on bad passphrase
+        while true; do
+            set +e
+            ARCHIVES=$(borg list "${REPO}")  # separate step so we may fail early on bad passphrase
+            RESULT=$?
+            set -e
+            if [ "${RESULT}" = "0" ]; then
+                break
+            elif [ "${RESULT}" != "2" ]; then
+                echo "Aborting due to unexpected ${NAME_BORGAPP} error."
+                exit 1
+            else
+                stty -echo
+                printf "Borg passphrase: "
+                read passphrase
+                stty echo
+                printf "\n"
+                export BORG_PASSPHRASE="${passphrase}"
+            fi
+        done
         ARCHIVE=$(echo "${ARCHIVES}" | grep "${NAME_ARCHIVE}" | tail -1 | cut -f1 -d' ')
         echo "Pulling archive: ${ARCHIVE}"
         cd /
         borg extract --verbose "${REPO}::${ARCHIVE}"
-       break
+        break
     done
 fi