|
@@ -379,6 +379,62 @@ function backup_mariadb {
|
379
|
379
|
fi
|
380
|
380
|
}
|
381
|
381
|
|
|
382
|
+# Returns the filename of a key share
|
|
383
|
+function get_key_share {
|
|
384
|
+ no_of_shares=$1
|
|
385
|
+ USERNAME="$2"
|
|
386
|
+ REMOTE_DOMAIN="$3"
|
|
387
|
+
|
|
388
|
+ # Get a share index based on the supplied domain name
|
|
389
|
+ # This ensures that the same share is always given to the same domain
|
|
390
|
+ sharenumstr=$(md5sum <<< "$REMOTE_DOMAIN")
|
|
391
|
+ share_index=$(echo $((0x${sharenumstr%% *} % ${no_of_shares})) | tr -d -)
|
|
392
|
+
|
|
393
|
+ # get the filename
|
|
394
|
+ share_files=(/home/$USERNAME/.gnupg_fragments/keyshare.asc.*)
|
|
395
|
+ share_filename=${share_files[share_index]}
|
|
396
|
+
|
|
397
|
+ echo "$share_filename"
|
|
398
|
+}
|
|
399
|
+
|
|
400
|
+function disperse_key_shares {
|
|
401
|
+ USERNAME=$1
|
|
402
|
+ REMOTE_DOMAIN=$2
|
|
403
|
+ REMOTE_SSH_PORT=$3
|
|
404
|
+ REMOTE_PASSWORD=$4
|
|
405
|
+ REMOTE_SERVER=$5
|
|
406
|
+
|
|
407
|
+ if [ -d /home/$USERNAME/.gnupg_fragments ]; then
|
|
408
|
+ if [ $REMOTE_DOMAIN ]; then
|
|
409
|
+ cd /home/$USERNAME/.gnupg_fragments
|
|
410
|
+ no_of_shares=$(ls -afq keyshare.asc.* | wc -l)
|
|
411
|
+ if (( no_of_shares > 1 )); then
|
|
412
|
+ share_filename=$(get_key_share $no_of_shares "$USERNAME" "$REMOTE_DOMAIN")
|
|
413
|
+
|
|
414
|
+ # create a temp directory containing the share
|
|
415
|
+ temp_key_share_dir=/home/$USERNAME/tempkey
|
|
416
|
+ temp_key_share_fragments=$temp_key_share_dir/.gnupg_fragments_${USERNAME}
|
|
417
|
+ mkdir -p $temp_key_share_fragments
|
|
418
|
+ cp $share_filename $temp_key_share_fragments/
|
|
419
|
+
|
|
420
|
+ # copy the fragments directory to the remote server
|
|
421
|
+ /usr/bin/sshpass -p "$REMOTE_PASSWORD" scp -r -P $REMOTE_SSH_PORT $temp_key_share_fragments $REMOTE_SERVER
|
|
422
|
+ if [ ! "$?" = "0" ]; then
|
|
423
|
+ # Send a warning email
|
|
424
|
+ echo "Key share to $REMOTE_SERVER failed" | mail -s "${PROJECT_NAME} social key management" $MY_EMAIL_ADDRESS
|
|
425
|
+ fi
|
|
426
|
+
|
|
427
|
+ # remove the temp file/directory
|
|
428
|
+ shred -zu $temp_key_share_fragments/*
|
|
429
|
+ rm -rf $temp_key_share_dir
|
|
430
|
+
|
|
431
|
+ # Send a confirmation email
|
|
432
|
+ echo "Key shared to $REMOTE_SERVER" | mail -s "${PROJECT_NAME} social key management" $MY_EMAIL_ADDRESS
|
|
433
|
+ fi
|
|
434
|
+ fi
|
|
435
|
+ fi
|
|
436
|
+}
|
|
437
|
+
|
382
|
438
|
backup_configuration
|
383
|
439
|
backup_users
|
384
|
440
|
backup_letsencrypt
|
|
@@ -418,44 +474,11 @@ do
|
418
|
474
|
for d in /home/*/ ; do
|
419
|
475
|
USERNAME=$(echo "$d" | awk -F '/' '{print $3}')
|
420
|
476
|
if [[ $USERNAME != "git" ]]; then
|
421
|
|
- if [ -d /home/$USERNAME/.gnupg_fragments ]; then
|
422
|
|
- if [ $REMOTE_DOMAIN ]; then
|
423
|
|
- cd /home/$USERNAME/.gnupg_fragments
|
424
|
|
- no_of_shares=$(ls -afq keyshare.asc.* | wc -l)
|
425
|
|
- if (( no_of_shares > 0 )); then
|
426
|
|
- # Pick a share index based on the domain name
|
427
|
|
- # This ensures that the same share is always given to the same domain
|
428
|
|
- sharenumstr=$(md5sum <<< "$REMOTE_DOMAIN")
|
429
|
|
- share_index=$(echo $((0x${sharenumstr%% *} % ${no_of_shares})) | tr -d -)
|
430
|
|
-
|
431
|
|
- # get the share filename
|
432
|
|
- share_files=(/home/$USERNAME/.gnupg_fragments/keyshare.asc.*)
|
433
|
|
- share_filename=${share_files[share_index]}
|
434
|
|
-
|
435
|
|
- # create a temp directory containing the share
|
436
|
|
- mkdir -p /home/$USERNAME/tempkey/.gnupg_fragments_$USERNAME
|
437
|
|
- cp $share_filename /home/$USERNAME/tempkey/.gnupg_fragments_$USERNAME/
|
438
|
|
-
|
439
|
|
- # copy the fragments directory to the remote server
|
440
|
|
- /usr/bin/sshpass -p $REMOTE_PASSWORD scp -r -P $REMOTE_SSH_PORT /home/$USERNAME/tempkey/.gnupg_fragments_$USERNAME $REMOTE_SERVER
|
441
|
|
- if [ ! "$?" = "0" ]; then
|
442
|
|
- # Send a warning email
|
443
|
|
- echo "Key share to $REMOTE_SERVER failed" | mail -s "${PROJECT_NAME} social key management" $MY_EMAIL_ADDRESS
|
444
|
|
- fi
|
445
|
|
-
|
446
|
|
- # remove the temp file/directory
|
447
|
|
- shred -zu /home/$USERNAME/tempkey/.gnupg_fragments_$USERNAME/*
|
448
|
|
- rm -rf /home/$USERNAME/tempkey
|
449
|
|
-
|
450
|
|
- # Send a confirmation email
|
451
|
|
- echo "Key shared to $REMOTE_SERVER" | mail -s "${PROJECT_NAME} social key management" $MY_EMAIL_ADDRESS
|
452
|
|
- fi
|
453
|
|
- fi
|
454
|
|
- fi
|
|
477
|
+ disperse_key_shares $USERNAME $REMOTE_DOMAIN $REMOTE_SSH_PORT "$REMOTE_PASSWORD" $REMOTE_SERVER
|
455
|
478
|
fi
|
456
|
479
|
done
|
457
|
480
|
|
458
|
|
- rsync -ratlzv --rsh="/usr/bin/sshpass -p $REMOTE_PASSWORD ssh -p $REMOTE_SSH_PORT -o StrictHostKeyChecking=no" $SERVER_DIRECTORY/backup $REMOTE_SERVER
|
|
481
|
+ rsync -ratlzv --rsh="/usr/bin/sshpass -p \"$REMOTE_PASSWORD\" ssh -p $REMOTE_SSH_PORT -o StrictHostKeyChecking=no" $SERVER_DIRECTORY/backup $REMOTE_SERVER
|
459
|
482
|
if [ ! "$?" = "0" ]; then
|
460
|
483
|
echo "$NOW Backup to $REMOTE_SERVER failed" >> /var/log/remotebackups.log
|
461
|
484
|
# Send a warning email
|