Browse Source

Continuing with 'unforgettable key' implementation

Bob Mottram 10 years ago
parent
commit
5e862cdc35
4 changed files with 178 additions and 27 deletions
  1. BIN
      man/freedombone-recoverkey.1.gz
  2. 50
    15
      src/freedombone
  3. 66
    11
      src/freedombone-config
  4. 62
    1
      src/freedombone-recoverkey

BIN
man/freedombone-recoverkey.1.gz View File


+ 50
- 15
src/freedombone View File

3782
   # we just need to rsync it to each friend
3782
   # we just need to rsync it to each friend
3783
 
3783
 
3784
   echo '# For each remote server' >> /usr/bin/$BACKUP_TO_FRIENDS_SCRIPT_NAME
3784
   echo '# For each remote server' >> /usr/bin/$BACKUP_TO_FRIENDS_SCRIPT_NAME
3785
-  echo 'ctr_share=0' >> /usr/bin/$BACKUP_TO_FRIENDS_SCRIPT_NAME
3786
   echo 'while read remote_server' >> /usr/bin/$BACKUP_TO_FRIENDS_SCRIPT_NAME
3785
   echo 'while read remote_server' >> /usr/bin/$BACKUP_TO_FRIENDS_SCRIPT_NAME
3787
   echo 'do' >> /usr/bin/$BACKUP_TO_FRIENDS_SCRIPT_NAME
3786
   echo 'do' >> /usr/bin/$BACKUP_TO_FRIENDS_SCRIPT_NAME
3788
   echo '  # Get the server and its password' >> /usr/bin/$BACKUP_TO_FRIENDS_SCRIPT_NAME
3787
   echo '  # Get the server and its password' >> /usr/bin/$BACKUP_TO_FRIENDS_SCRIPT_NAME
3793
   echo -n '$1' >> /usr/bin/$BACKUP_TO_FRIENDS_SCRIPT_NAME
3792
   echo -n '$1' >> /usr/bin/$BACKUP_TO_FRIENDS_SCRIPT_NAME
3794
   echo "}')" >> /usr/bin/$BACKUP_TO_FRIENDS_SCRIPT_NAME
3793
   echo "}')" >> /usr/bin/$BACKUP_TO_FRIENDS_SCRIPT_NAME
3795
   echo '  if [ $REMOTE_SERVER ]; then' >> /usr/bin/$BACKUP_TO_FRIENDS_SCRIPT_NAME
3794
   echo '  if [ $REMOTE_SERVER ]; then' >> /usr/bin/$BACKUP_TO_FRIENDS_SCRIPT_NAME
3795
+  echo -n '    REMOTE_DOMAIN=$(echo "${remote_server}" | ' >> /usr/bin/$BACKUP_TO_FRIENDS_SCRIPT_NAME
3796
+  echo -n "awk -F ':' '{print " >> /usr/bin/$BACKUP_TO_FRIENDS_SCRIPT_NAME
3797
+  echo -n '$1' >> /usr/bin/$BACKUP_TO_FRIENDS_SCRIPT_NAME
3798
+  echo -n "}' | awk -F '@' '{print " >> /usr/bin/$BACKUP_TO_FRIENDS_SCRIPT_NAME
3799
+  echo -n '$2' >> /usr/bin/$BACKUP_TO_FRIENDS_SCRIPT_NAME
3800
+  echo "}')" >> /usr/bin/$BACKUP_TO_FRIENDS_SCRIPT_NAME
3796
   echo -n '    REMOTE_SSH_PORT=$(echo "${remote_server}" | ' >> /usr/bin/$BACKUP_TO_FRIENDS_SCRIPT_NAME
3801
   echo -n '    REMOTE_SSH_PORT=$(echo "${remote_server}" | ' >> /usr/bin/$BACKUP_TO_FRIENDS_SCRIPT_NAME
3797
   echo -n "awk -F ' ' '{print " >> /usr/bin/$BACKUP_TO_FRIENDS_SCRIPT_NAME
3802
   echo -n "awk -F ' ' '{print " >> /usr/bin/$BACKUP_TO_FRIENDS_SCRIPT_NAME
3798
   echo -n '$2' >> /usr/bin/$BACKUP_TO_FRIENDS_SCRIPT_NAME
3803
   echo -n '$2' >> /usr/bin/$BACKUP_TO_FRIENDS_SCRIPT_NAME
3808
   echo "$REMOTE_BACKUPS_LOG" >> /usr/bin/$BACKUP_TO_FRIENDS_SCRIPT_NAME
3813
   echo "$REMOTE_BACKUPS_LOG" >> /usr/bin/$BACKUP_TO_FRIENDS_SCRIPT_NAME
3809
 
3814
 
3810
   if [[ $ENABLE_SOCIAL_KEY_MANAGEMENT == "yes" ]]; then
3815
   if [[ $ENABLE_SOCIAL_KEY_MANAGEMENT == "yes" ]]; then
3816
+      echo '' >> /usr/bin/$BACKUP_TO_FRIENDS_SCRIPT_NAME
3817
+      echo '    # Social key management' >> /usr/bin/$BACKUP_TO_FRIENDS_SCRIPT_NAME
3811
       echo "    if [ -d /home/$MY_USERNAME/.gnupg_fragments ]; then" >> /usr/bin/$BACKUP_TO_FRIENDS_SCRIPT_NAME
3818
       echo "    if [ -d /home/$MY_USERNAME/.gnupg_fragments ]; then" >> /usr/bin/$BACKUP_TO_FRIENDS_SCRIPT_NAME
3812
-      echo "        cd /home/$MY_USERNAME/.gnupg_fragments" >> /usr/bin/$BACKUP_TO_FRIENDS_SCRIPT_NAME
3813
-      echo '        no_of_shares=$(ls -afq keyshare* | wc -l)' >> /usr/bin/$BACKUP_TO_FRIENDS_SCRIPT_NAME
3814
-      echo '        no_of_shares=$((no_of_fragments - 2))' >> /usr/bin/$BACKUP_TO_FRIENDS_SCRIPT_NAME
3815
-      echo '        if [[ ${no_of_shares} > 0 ]]; then' >> /usr/bin/$BACKUP_TO_FRIENDS_SCRIPT_NAME
3816
-      echo '            share_files=(/home/$MY_USERNAME/.gnupg_fragments/keyshare*)' >> /usr/bin/$BACKUP_TO_FRIENDS_SCRIPT_NAME
3817
-      echo '            share_filename=${key_files[ctr_share]}' >> /usr/bin/$BACKUP_TO_FRIENDS_SCRIPT_NAME
3818
-      echo "            mkdir -p /home/$MY_USERNAME/tempkey/.gnupg_fragments" >> /usr/bin/$BACKUP_TO_FRIENDS_SCRIPT_NAME
3819
-      echo "            cp $share_filename /home/$MY_USERNAME/tempkey/.gnupg_fragments/data" >> /usr/bin/$BACKUP_TO_FRIENDS_SCRIPT_NAME
3820
-      echo -n '            /usr/bin/sshpass -p $REMOTE_PASSWORD ' >> /usr/bin/$BACKUP_TO_FRIENDS_SCRIPT_NAME
3819
+      echo '        if [ $REMOTE_DOMAIN ]; then' >> /usr/bin/$BACKUP_TO_FRIENDS_SCRIPT_NAME
3820
+      echo "            cd /home/$MY_USERNAME/.gnupg_fragments" >> /usr/bin/$BACKUP_TO_FRIENDS_SCRIPT_NAME
3821
+      echo '            no_of_shares=$(ls -afq keyshare* | wc -l)' >> /usr/bin/$BACKUP_TO_FRIENDS_SCRIPT_NAME
3822
+      echo '            no_of_shares=$((no_of_fragments - 2))' >> /usr/bin/$BACKUP_TO_FRIENDS_SCRIPT_NAME
3823
+      echo '            if [[ ${no_of_shares} > 0 ]]; then' >> /usr/bin/$BACKUP_TO_FRIENDS_SCRIPT_NAME
3824
+      echo '                # Pick a share index based on the domain name' >> /usr/bin/$BACKUP_TO_FRIENDS_SCRIPT_NAME
3825
+      echo '                # This ensures that the same share is always given to the same domain' >> /usr/bin/$BACKUP_TO_FRIENDS_SCRIPT_NAME
3826
+      echo '                sharenumstr=$(md5sum <<< "$REMOTE_DOMAIN")' >> /usr/bin/$BACKUP_TO_FRIENDS_SCRIPT_NAME
3827
+      echo '                share_index=$(echo $((0x${sharenumstr%% *} % ${no_of_shares})) | tr -d -)' >> /usr/bin/$BACKUP_TO_FRIENDS_SCRIPT_NAME
3828
+      echo '' >> /usr/bin/$BACKUP_TO_FRIENDS_SCRIPT_NAME
3829
+      echo '                # get the share filename' >> /usr/bin/$BACKUP_TO_FRIENDS_SCRIPT_NAME
3830
+      echo '                share_files=(/home/$MY_USERNAME/.gnupg_fragments/keyshare*)' >> /usr/bin/$BACKUP_TO_FRIENDS_SCRIPT_NAME
3831
+      echo '                share_filename=${share_files[share_index]}' >> /usr/bin/$BACKUP_TO_FRIENDS_SCRIPT_NAME
3832
+      echo '' >> /usr/bin/$BACKUP_TO_FRIENDS_SCRIPT_NAME
3833
+      echo '                # create a temp directory containing the share' >> /usr/bin/$BACKUP_TO_FRIENDS_SCRIPT_NAME
3834
+      echo "                mkdir -p /home/$MY_USERNAME/tempkey/.gnupg_fragments" >> /usr/bin/$BACKUP_TO_FRIENDS_SCRIPT_NAME
3835
+      echo "                cp $share_filename /home/$MY_USERNAME/tempkey/.gnupg_fragments/" >> /usr/bin/$BACKUP_TO_FRIENDS_SCRIPT_NAME
3836
+      echo '' >> /usr/bin/$BACKUP_TO_FRIENDS_SCRIPT_NAME
3837
+      echo '                # copy the fragments directory to the remote server' >> /usr/bin/$BACKUP_TO_FRIENDS_SCRIPT_NAME
3838
+      echo -n '                /usr/bin/sshpass -p $REMOTE_PASSWORD ' >> /usr/bin/$BACKUP_TO_FRIENDS_SCRIPT_NAME
3821
       echo "scp -r -P $REMOTE_SSH_PORT /home/$MY_USERNAME/tempkey/.gnupg_fragments $REMOTE_SERVER" >> /usr/bin/$BACKUP_TO_FRIENDS_SCRIPT_NAME
3839
       echo "scp -r -P $REMOTE_SSH_PORT /home/$MY_USERNAME/tempkey/.gnupg_fragments $REMOTE_SERVER" >> /usr/bin/$BACKUP_TO_FRIENDS_SCRIPT_NAME
3822
-      echo "            shred -zu /home/$MY_USERNAME/tempkey/.gnupg_fragments/*" >> /usr/bin/$BACKUP_TO_FRIENDS_SCRIPT_NAME
3823
-      echo "            rm -rf /home/$MY_USERNAME/tempkey" >> /usr/bin/$BACKUP_TO_FRIENDS_SCRIPT_NAME
3824
-      echo '            ctr_share=$((ctr_share + 1))' >> /usr/bin/$BACKUP_TO_FRIENDS_SCRIPT_NAME
3825
-      echo '            if [[ ${ctr_share} >= ${no_of_shares} ]]; then' >> /usr/bin/$BACKUP_TO_FRIENDS_SCRIPT_NAME
3826
-      echo '                ctr_share=0' >> /usr/bin/$BACKUP_TO_FRIENDS_SCRIPT_NAME
3840
+      echo '                if [ ! "$?" = "0" ]; then' >> /usr/bin/$BACKUP_TO_FRIENDS_SCRIPT_NAME
3841
+      echo '                    # Send a warning email' >> /usr/bin/$BACKUP_TO_FRIENDS_SCRIPT_NAME
3842
+      echo -n '                    echo "Key share to $REMOTE_SERVER failed" | mail -s "Freedombone social key management" ' >> /usr/bin/$BACKUP_TO_FRIENDS_SCRIPT_NAME
3843
+      echo "$MY_EMAIL_ADDRESS" >> /usr/bin/$BACKUP_TO_FRIENDS_SCRIPT_NAME
3844
+      echo '                fi' >> /usr/bin/$BACKUP_TO_FRIENDS_SCRIPT_NAME
3845
+      echo '' >> /usr/bin/$BACKUP_TO_FRIENDS_SCRIPT_NAME
3846
+      echo '                # remove the temp file/directory' >> /usr/bin/$BACKUP_TO_FRIENDS_SCRIPT_NAME
3847
+      echo "                shred -zu /home/$MY_USERNAME/tempkey/.gnupg_fragments/*" >> /usr/bin/$BACKUP_TO_FRIENDS_SCRIPT_NAME
3848
+      echo "                rm -rf /home/$MY_USERNAME/tempkey" >> /usr/bin/$BACKUP_TO_FRIENDS_SCRIPT_NAME
3849
+      echo '' >> /usr/bin/$BACKUP_TO_FRIENDS_SCRIPT_NAME
3850
+      echo '                # Send a confirmation email' >> /usr/bin/$BACKUP_TO_FRIENDS_SCRIPT_NAME
3851
+      echo -n '                echo "Key shared to $REMOTE_SERVER" | mail -s "Freedombone social key management" ' >> /usr/bin/$BACKUP_TO_FRIENDS_SCRIPT_NAME
3852
+      echo "$MY_EMAIL_ADDRESS" >> /usr/bin/$BACKUP_TO_FRIENDS_SCRIPT_NAME
3827
       echo '            fi' >> /usr/bin/$BACKUP_TO_FRIENDS_SCRIPT_NAME
3853
       echo '            fi' >> /usr/bin/$BACKUP_TO_FRIENDS_SCRIPT_NAME
3828
       echo '        fi' >> /usr/bin/$BACKUP_TO_FRIENDS_SCRIPT_NAME
3854
       echo '        fi' >> /usr/bin/$BACKUP_TO_FRIENDS_SCRIPT_NAME
3829
       echo '    fi' >> /usr/bin/$BACKUP_TO_FRIENDS_SCRIPT_NAME
3855
       echo '    fi' >> /usr/bin/$BACKUP_TO_FRIENDS_SCRIPT_NAME
3830
   fi
3856
   fi
3831
 
3857
 
3858
+  echo '' >> /usr/bin/$BACKUP_TO_FRIENDS_SCRIPT_NAME
3832
   echo -n '    rsync -ratlzv --rsh="/usr/bin/sshpass -p $REMOTE_PASSWORD ssh -p $REMOTE_SSH_PORT -o StrictHostKeyChecking=no" ' >> /usr/bin/$BACKUP_TO_FRIENDS_SCRIPT_NAME
3859
   echo -n '    rsync -ratlzv --rsh="/usr/bin/sshpass -p $REMOTE_PASSWORD ssh -p $REMOTE_SSH_PORT -o StrictHostKeyChecking=no" ' >> /usr/bin/$BACKUP_TO_FRIENDS_SCRIPT_NAME
3833
   echo '$SERVER_DIRECTORY/backup $REMOTE_SERVER' >> /usr/bin/$BACKUP_TO_FRIENDS_SCRIPT_NAME
3860
   echo '$SERVER_DIRECTORY/backup $REMOTE_SERVER' >> /usr/bin/$BACKUP_TO_FRIENDS_SCRIPT_NAME
3834
   echo '    if [ ! "$?" = "0" ]; then' >> /usr/bin/$BACKUP_TO_FRIENDS_SCRIPT_NAME
3861
   echo '    if [ ! "$?" = "0" ]; then' >> /usr/bin/$BACKUP_TO_FRIENDS_SCRIPT_NAME
4480
   echo '    rm -rf /root/tempdlna' >> /usr/bin/$RESTORE_FROM_FRIEND_SCRIPT_NAME
4507
   echo '    rm -rf /root/tempdlna' >> /usr/bin/$RESTORE_FROM_FRIEND_SCRIPT_NAME
4481
   echo '  fi' >> /usr/bin/$RESTORE_FROM_FRIEND_SCRIPT_NAME
4508
   echo '  fi' >> /usr/bin/$RESTORE_FROM_FRIEND_SCRIPT_NAME
4482
   echo 'fi' >> /usr/bin/$RESTORE_FROM_FRIEND_SCRIPT_NAME
4509
   echo 'fi' >> /usr/bin/$RESTORE_FROM_FRIEND_SCRIPT_NAME
4510
+
4511
+  if [[ $ENABLE_SOCIAL_KEY_MANAGEMENT == "yes" ]]; then
4512
+      echo '' >> /usr/bin/$RESTORE_FROM_FRIENDS_SCRIPT_NAME
4513
+      echo '# Retrieve key fragments' >> /usr/bin/$RESTORE_FROM_FRIENDS_SCRIPT_NAME
4514
+      echo -n '/usr/bin/sshpass -p $REMOTE_PASSWORD ' >> /usr/bin/$RESTORE_FROM_FRIENDS_SCRIPT_NAME
4515
+      echo "scp -r -P $REMOTE_SSH_PORT $REMOTE_SERVER/.gnupg_fragments /home/$MY_USERNAME/" >> /usr/bin/$RESTORE_FROM_FRIENDS_SCRIPT_NAME
4516
+  fi
4517
+
4483
   echo '' >> /usr/bin/$RESTORE_FROM_FRIEND_SCRIPT_NAME
4518
   echo '' >> /usr/bin/$RESTORE_FROM_FRIEND_SCRIPT_NAME
4484
   echo 'echo "*** Remote restore was successful ***"' >> /usr/bin/$RESTORE_FROM_FRIEND_SCRIPT_NAME
4519
   echo 'echo "*** Remote restore was successful ***"' >> /usr/bin/$RESTORE_FROM_FRIEND_SCRIPT_NAME
4485
   echo '' >> /usr/bin/$RESTORE_FROM_FRIEND_SCRIPT_NAME
4520
   echo '' >> /usr/bin/$RESTORE_FROM_FRIEND_SCRIPT_NAME

+ 66
- 11
src/freedombone-config View File

224
       echo "HWRNG=$HWRNG" >> $CONFIGURATION_FILE
224
       echo "HWRNG=$HWRNG" >> $CONFIGURATION_FILE
225
   fi
225
   fi
226
   if [ $ENABLE_SOCIAL_KEY_MANAGEMENT ]; then
226
   if [ $ENABLE_SOCIAL_KEY_MANAGEMENT ]; then
227
-	  echo "ENABLE_SOCIAL_KEY_MANAGEMENT=$ENABLE_SOCIAL_KEY_MANAGEMENT" >> $CONFIGURATION_FILE
227
+      echo "ENABLE_SOCIAL_KEY_MANAGEMENT=$ENABLE_SOCIAL_KEY_MANAGEMENT" >> $CONFIGURATION_FILE
228
   fi
228
   fi
229
 }
229
 }
230
 
230
 
241
   fi
241
   fi
242
 }
242
 }
243
 
243
 
244
-function interactive_gpg {
245
-  dialog --title "Encryption keys" \
246
-         --backtitle "Freedombone Configuration" \
247
-         --defaultno \
248
-         --yesno "\nDo you have existing GPG/PGP/ssh keys that you wish to install?" 7 60
249
-  sel=$?
250
-  case $sel in
251
-      1) return;;
252
-      255) exit 0;;
253
-  esac
244
+function interactive_gpg_from_remote {
245
+  REMOTE_SERVERS_LIST=/home/$MY_USERNAME/keyshareservers.txt
246
+
247
+  # get a list of remote servers
248
+  freedombone-remote -u $MY_USERNAME -l $REMOTE_SERVERS_LIST
249
+  if [ ! "$?" = "0" ]; then
250
+      echo "1"
251
+      return
252
+  fi
253
+
254
+  if [ ! -f $REMOTE_SERVERS_LIST ]; then
255
+      echo "2"
256
+      return
257
+  fi
258
+  
259
+  # check the number of entries in the file
260
+  no_of_servers=$(cat $REMOTE_SERVERS_LIST | wc -l)
261
+  if [[ ${no_of_servers} < 3 ]]; then
262
+      dialog --title "Encryption keys" --msgbox 'There must be at least three servers to recover the key' 6 70
263
+      echo "3"
264
+      return
265
+  fi
266
+  
267
+  # try to recover the key from the servers
268
+  freedombone-recoverkey -u $MY_USERNAME -l $REMOTE_SERVERS_LIST
269
+  if [ ! "$?" = "0" ]; then
270
+      dialog --title "Encryption keys" --msgbox 'Your key could not be recovered' 6 70
271
+      echo "4"
272
+      return
273
+  fi
274
+
275
+  dialog --title "Encryption keys" --msgbox 'Your key has been recovered' 6 70
276
+
277
+  echo '0'
278
+}
254
 
279
 
280
+function interactive_gpg_from_usb {
255
   dialog --title "Encryption keys" --msgbox 'Plug in a USB drive containing a copy of your .gnupg directory' 6 70
281
   dialog --title "Encryption keys" --msgbox 'Plug in a USB drive containing a copy of your .gnupg directory' 6 70
256
 
282
 
257
   if [[ $INSTALLING_ON_BBB == "yes" ]]; then
283
   if [[ $INSTALLING_ON_BBB == "yes" ]]; then
312
   rm -rf $GPG_USB_MOUNT
338
   rm -rf $GPG_USB_MOUNT
313
 }
339
 }
314
 
340
 
341
+function interactive_gpg {
342
+  GPG_CONFIGURED="no"
343
+  while [[ $GPG_CONFIGURED != "yes" ]]
344
+  do
345
+      GPG_CONFIGURED="yes"
346
+      data=$(tempfile 2>/dev/null)
347
+      trap "rm -f $data" 0 1 2 5 15
348
+      dialog --backtitle "Freedombone Configuration" \
349
+          --radiolist "GPG/PGP keys for your system:" 17 40 3 \
350
+          1 "Generate new keys (new user)" on \
351
+          2 "Import keys from a USB drive" off \
352
+          3 "Retrieve keys from friends servers" off 2> $data
353
+      sel=$?
354
+      case $sel in
355
+          1) exit 0;;
356
+          255) exit 0;;
357
+      esac
358
+      case $(cat $data) in
359
+          1) return;;
360
+          2) interactive_gpg_from_usb
361
+             return;;
362
+          3) retval=interactive_gpg_from_remote
363
+             if [[ retval != '0' ]]; then
364
+                 GPG_CONFIGURED="no"
365
+             fi;;
366
+      esac
367
+  done
368
+}
369
+
315
 function interactive_configuration {
370
 function interactive_configuration {
316
   # create a temporary copy of the configuration file
371
   # create a temporary copy of the configuration file
317
   # which can be used to pre-populate selections
372
   # which can be used to pre-populate selections

+ 62
- 1
src/freedombone-recoverkey View File

28
 # You should have received a copy of the GNU General Public License
28
 # You should have received a copy of the GNU General Public License
29
 # along with this program. If not, see <http://www.gnu.org/licenses/>.
29
 # along with this program. If not, see <http://www.gnu.org/licenses/>.
30
 
30
 
31
+FRIENDS_SERVERS_LIST=
32
+MY_USERNAME=
33
+
31
 function show_help {
34
 function show_help {
32
     echo ''
35
     echo ''
33
-    echo 'freedombone-recoverkey -u [username]'
36
+    echo 'freedombone-recoverkey -u [username] -l [friends servers list filename]'
34
     echo ''
37
     echo ''
35
     exit 0
38
     exit 0
36
 }
39
 }
47
     shift
50
     shift
48
     MY_USERNAME="$1"
51
     MY_USERNAME="$1"
49
     ;;
52
     ;;
53
+    # backup list filename
54
+    # typically /home/$USER/backup.list
55
+    -l|--list)
56
+    shift
57
+    FRIENDS_SERVERS_LIST="$1"
58
+    ;;
50
     *)
59
     *)
51
     # unknown option
60
     # unknown option
52
     ;;
61
     ;;
70
     echo "User $MY_USERNAME does not exist on the system"
79
     echo "User $MY_USERNAME does not exist on the system"
71
     exit 7270
80
     exit 7270
72
 fi
81
 fi
82
+
73
 FRAGMENTS_DIR=/home/$MY_USERNAME/.gnupg_fragments
83
 FRAGMENTS_DIR=/home/$MY_USERNAME/.gnupg_fragments
84
+
85
+# find the remote backup list
86
+if [ ! $FRIENDS_SERVERS_LIST ]; then
87
+    if [ -f /home/$MY_USERNAME/backup.list ]; then
88
+        FRIENDS_SERVERS_LIST=/home/$MY_USERNAME/backup.list
89
+    fi
90
+fi
91
+
92
+# obtain shares/fragments from remote locations
93
+if [ $FRIENDS_SERVERS_LIST ]; then
94
+    # For each remote server
95
+    while read remote_server
96
+    do
97
+        # Get the server and its password
98
+        # Format is:
99
+        #   username@domain:/home/username <port number> <ssh password>
100
+        REMOTE_SERVER=$(echo "${remote_server}" | awk -F ' ' '{print $1}')
101
+        if [ $REMOTE_SERVER ]; then
102
+            REMOTE_SSH_PORT=$(echo "${remote_server}" | awk -F ' ' '{print $2}')
103
+            REMOTE_PASSWORD=$(echo "${remote_server}" | awk -F ' ' '{print $3}')
104
+
105
+            # create a directory if it doesn't exist
106
+            if [ ! -d /home/$MY_USERNAME/.gnupg_fragments ]; then
107
+                mkdir -p /home/$MY_USERNAME/.gnupg_fragments
108
+            fi
109
+
110
+            echo -n "Starting key retrieval from $REMOTE_SERVER..."
111
+            /usr/bin/sshpass -p $REMOTE_PASSWORD \
112
+                scp -r -P $REMOTE_SSH_PORT $REMOTE_SERVER/.gnupg_fragments/* /home/$MY_USERNAME/.gnupg_fragments
113
+            if [ ! "$?" = "0" ]; then
114
+                echo 'FAILED'
115
+            else
116
+                echo 'Ok'
117
+            fi
118
+        fi
119
+    done < $FRIENDS_SERVERS_LIST
120
+fi   
121
+
122
+# was a directory created?
74
 if [ ! -d $FRAGMENTS_DIR ]; then
123
 if [ ! -d $FRAGMENTS_DIR ]; then
75
     echo 'No fragments have been recovered, so the key cannot be recovered'
124
     echo 'No fragments have been recovered, so the key cannot be recovered'
76
     exit 7483
125
     exit 7483
77
 fi
126
 fi
78
 
127
 
128
+# was anything downloaded?
129
+cd $FRAGMENTS_DIR
130
+no_of_shares=$(ls -afq keyshare* | wc -l)
131
+no_of_shares=$((no_of_shares - 2))
132
+if [[ ${no_of_shares} == 0 ]]; then
133
+    echo 'No key fragments were retrieved'
134
+    exit 76882
135
+fi
136
+
137
+# set permissions on the fragments
138
+chown -R $MY_USERNAME:$MY_USERNAME /home/$MY_USERNAME/.gnupg_fragments
139
+
79
 # decrypt the file
140
 # decrypt the file
80
 KEYS_FILE=$FRAGMENTS_DIR/keyshare.asc
141
 KEYS_FILE=$FRAGMENTS_DIR/keyshare.asc
81
 cd $FRAGMENTS_DIR
142
 cd $FRAGMENTS_DIR