浏览代码

Use an ssh key for backup encryption

Bob Mottram 10 年前
父节点
当前提交
a6f9a69986
共有 1 个文件被更改,包括 27 次插入18 次删除
  1. 27
    18
      install-freedombone.sh

+ 27
- 18
install-freedombone.sh 查看文件

@@ -240,10 +240,6 @@ BACKUP_TO_FRIENDS_SCRIPT_NAME="backup2friends"
240 240
 # name of a script used to restore backed up data from a friend
241 241
 RESTORE_FROM_FRIEND_SCRIPT_NAME="restorefromfriend"
242 242
 
243
-# passphrase used for automatic backups to friends servers
244
-# this will be automatically generated
245
-BACKUP_TO_FRIENDS_PASSPHRASE=
246
-
247 243
 # memory limit for php in MB
248 244
 MAX_PHP_MEMORY=64
249 245
 
@@ -631,7 +627,7 @@ function create_backup_script {
631 627
       echo "tar -czvf /home/$MY_USERNAME/tempfiles/blog.tar.gz /var/www/$FULLBLOG_DOMAIN_NAME/htdocs" >> /usr/bin/$BACKUP_SCRIPT_NAME
632 628
   fi
633 629
   echo 'echo "Archiving miscellaneous files"' >> /usr/bin/$BACKUP_SCRIPT_NAME
634
-  echo "tar -czvf /home/$MY_USERNAME/tempfiles/miscfiles.tar.gz /home/$MY_USERNAME/.gnupg /home/$MY_USERNAME/.muttrc /home/$MY_USERNAME/.procmailrc /home/$MY_USERNAME/.ssh /var/lib/mysql/mysql /var/www /etc/nginx/sites-available /etc/ssl/private /etc/ssl/certs $GITHUB_BACKUP_DIRECTORY /home/$MY_USERNAME/projects /home/$MY_USERNAME/personal /home/$MY_USERNAME/README" >> /usr/bin/$BACKUP_SCRIPT_NAME
630
+  echo "tar -czvf /home/$MY_USERNAME/tempfiles/miscfiles.tar.gz /home/$MY_USERNAME/.gnupg /home/$MY_USERNAME/.muttrc /home/$MY_USERNAME/.procmailrc /home/$MY_USERNAME/.ssh /root/backupkey /var/lib/mysql/mysql /var/www /etc/nginx/sites-available /etc/ssl/private /etc/ssl/certs $GITHUB_BACKUP_DIRECTORY /home/$MY_USERNAME/projects /home/$MY_USERNAME/personal /home/$MY_USERNAME/README" >> /usr/bin/$BACKUP_SCRIPT_NAME
635 631
 
636 632
   echo '' >> /usr/bin/$BACKUP_SCRIPT_NAME
637 633
   echo '# Backup the public mailing list' >> /usr/bin/$BACKUP_SCRIPT_NAME
@@ -845,17 +841,13 @@ function backup_to_friends_servers {
845 841
   fi
846 842
 
847 843
   apt-get -y --force-yes install duplicity
848
-
849
-  if [ ! $BACKUP_TO_FRIENDS_PASSPHRASE ]; then
850
-      BACKUP_TO_FRIENDS_PASSPHRASE=$(openssl rand -base64 32)
851
-  fi
852
-
844
+  
853 845
   if ! grep -q "backups on friends servers" /home/$MY_USERNAME/README; then
854 846
       echo '' >> /home/$MY_USERNAME/README
855 847
       echo '' >> /home/$MY_USERNAME/README
856 848
       echo 'Backups' >> /home/$MY_USERNAME/README
857 849
       echo '=======' >> /home/$MY_USERNAME/README
858
-      echo "Passphrase for backups on friends servers: $BACKUP_TO_FRIENDS_PASSPHRASE" >> /home/$MY_USERNAME/README
850
+      echo 'Key file: /root/backupkey' >> /home/$MY_USERNAME/README
859 851
       echo "To add friends servers create a file called $FRIENDS_SERVERS_LIST"
860 852
       echo 'and add entries like this:' >> /home/$MY_USERNAME/README
861 853
       echo '' >> /home/$MY_USERNAME/README
@@ -869,7 +861,20 @@ function backup_to_friends_servers {
869 861
 
870 862
   echo '#!/bin/bash' > /usr/bin/$BACKUP_TO_FRIENDS_SCRIPT_NAME
871 863
   echo '' >> /usr/bin/$BACKUP_TO_FRIENDS_SCRIPT_NAME
872
-  echo "PASSPHRASE='$BACKUP_TO_FRIENDS_PASSPHRASE'" >> /usr/bin/$BACKUP_TO_FRIENDS_SCRIPT_NAME
864
+
865
+  echo '# Generate an ssh key used for encrypting backups' >> /usr/bin/$BACKUP_TO_FRIENDS_SCRIPT_NAME
866
+  echo "if [ ! -f /root/backupkey ]; then" >> /usr/bin/$BACKUP_TO_FRIENDS_SCRIPT_NAME
867
+  echo '  ssh-keygen -t rsa -f /root/backupkey -q -N ""' >> /usr/bin/$BACKUP_TO_FRIENDS_SCRIPT_NAME
868
+  echo '  sed -i "s/-----BEGIN RSA PRIVATE KEY-----//g" /root/backupkey' >> /usr/bin/$BACKUP_TO_FRIENDS_SCRIPT_NAME 
869
+  echo '  sed -i "s/-----END RSA PRIVATE KEY-----//g" /root/backupkey' >> /usr/bin/$BACKUP_TO_FRIENDS_SCRIPT_NAME 
870
+  echo '  sed -i "s/==//g" /root/backupkey' >> /usr/bin/$BACKUP_TO_FRIENDS_SCRIPT_NAME 
871
+  echo '  chmod 400 /root/backupkey' >> /usr/bin/$BACKUP_TO_FRIENDS_SCRIPT_NAME
872
+  echo '  rm /root/backupkey.pub' >> /usr/bin/$BACKUP_TO_FRIENDS_SCRIPT_NAME
873
+  echo 'fi' >> /usr/bin/$BACKUP_TO_FRIENDS_SCRIPT_NAME
874
+  echo '' >> /usr/bin/$BACKUP_TO_FRIENDS_SCRIPT_NAME
875
+
876
+  echo '# Passphrase is the ssh private key' >> /usr/bin/$BACKUP_TO_FRIENDS_SCRIPT_NAME
877
+  echo "PASSPHRASE=$(</root/backupkey)" >> /usr/bin/$BACKUP_TO_FRIENDS_SCRIPT_NAME
873 878
   echo '' >> /usr/bin/$BACKUP_TO_FRIENDS_SCRIPT_NAME
874 879
   echo "if [ ! -f $FRIENDS_SERVERS_LIST ]; then" >> /usr/bin/$BACKUP_TO_FRIENDS_SCRIPT_NAME
875 880
   echo '    exit 1' >> /usr/bin/$BACKUP_TO_FRIENDS_SCRIPT_NAME
@@ -905,7 +910,7 @@ function backup_to_friends_servers {
905 910
   if grep -Fxq "install_blog" $COMPLETION_FILE; then
906 911
       echo "tar -czvf /home/$MY_USERNAME/tempfiles/blog.tar.gz /var/www/$FULLBLOG_DOMAIN_NAME/htdocs/data" >> /usr/bin/$BACKUP_TO_FRIENDS_SCRIPT_NAME
907 912
   fi
908
-  echo "tar -czvf /home/$MY_USERNAME/tempfiles/miscfiles.tar.gz /home/$MY_USERNAME/.gnupg /home/$MY_USERNAME/.muttrc /home/$MY_USERNAME/.procmailrc /home/$MY_USERNAME/.ssh /var/lib/mysql/mysql /var/www /etc/nginx/sites-available /etc/ssl/private /etc/ssl/certs $GITHUB_BACKUP_DIRECTORY /home/$MY_USERNAME/projects /home/$MY_USERNAME/personal /home/$MY_USERNAME/README" >> /usr/bin/$BACKUP_TO_FRIENDS_SCRIPT_NAME
913
+  echo "tar -czvf /home/$MY_USERNAME/tempfiles/miscfiles.tar.gz /home/$MY_USERNAME/.gnupg /home/$MY_USERNAME/.muttrc /home/$MY_USERNAME/.procmailrc /home/$MY_USERNAME/.ssh /root/backupkey /var/lib/mysql/mysql /var/www /etc/nginx/sites-available /etc/ssl/private /etc/ssl/certs $GITHUB_BACKUP_DIRECTORY /home/$MY_USERNAME/projects /home/$MY_USERNAME/personal /home/$MY_USERNAME/README" >> /usr/bin/$BACKUP_TO_FRIENDS_SCRIPT_NAME
909 914
 
910 915
   echo '' >> /usr/bin/$BACKUP_TO_FRIENDS_SCRIPT_NAME
911 916
   echo 'while read remote_server' >> /usr/bin/$BACKUP_TO_FRIENDS_SCRIPT_NAME
@@ -1013,14 +1018,18 @@ function restore_from_friend {
1013 1018
       chown $MY_USERNAME:$MY_USERNAME /home/$MY_USERNAME/README
1014 1019
   fi
1015 1020
 
1016
-  if [ ! $BACKUP_TO_FRIENDS_PASSPHRASE ]; then
1017
-      BACKUP_TO_FRIENDS_PASSPHRASE=$(openssl rand -base64 32)
1018
-  fi
1019
-
1020 1021
   echo '#!/bin/bash' > /usr/bin/$RESTORE_FROM_FRIEND_SCRIPT_NAME
1021 1022
   echo 'SERVER_NAME=$1' >> /usr/bin/$RESTORE_FROM_FRIEND_SCRIPT_NAME
1022 1023
   echo '' >> /usr/bin/$RESTORE_FROM_FRIEND_SCRIPT_NAME
1023
-  echo "PASSPHRASE='$BACKUP_TO_FRIENDS_PASSPHRASE'" >> /usr/bin/$RESTORE_FROM_FRIEND_SCRIPT_NAME
1024
+
1025
+  echo '# Check that a backup key exists' >> /usr/bin/$RESTORE_FROM_FRIEND_SCRIPT_NAME
1026
+  echo "if [ ! -f /root/backupkey ]; then" >> /usr/bin/$RESTORE_FROM_FRIENDS_SCRIPT_NAME
1027
+  echo '  echo "No backup key was found in /root/backupkey"' >> /usr/bin/$RESTORE_FROM_FRIEND_SCRIPT_NAME
1028
+  echo '  exit 84' >> /usr/bin/$RESTORE_FROM_FRIEND_SCRIPT_NAME
1029
+  echo 'fi' >> /usr/bin/$RESTORE_FROM_FRIEND_SCRIPT_NAME
1030
+  echo '' >> /usr/bin/$RESTORE_FROM_FRIEND_SCRIPT_NAME
1031
+
1032
+  echo "PASSPHRASE=$(</root/backupkey)" >> /usr/bin/$RESTORE_FROM_FRIEND_SCRIPT_NAME
1024 1033
   echo '' >> /usr/bin/$RESTORE_FROM_FRIEND_SCRIPT_NAME
1025 1034
   echo 'if [ ! $SERVER_NAME ]; then' >> /usr/bin/$RESTORE_FROM_FRIEND_SCRIPT_NAME
1026 1035
   echo "    echo '$RESTORE_FROM_FRIEND_SCRIPT_NAME [server]'" >> /usr/bin/$RESTORE_FROM_FRIEND_SCRIPT_NAME