|
|
@@ -0,0 +1,125 @@
|
|
|
+#!/bin/bash
|
|
|
+#
|
|
|
+# Copyright (c) 2019 Clementine Computing LLC.
|
|
|
+#
|
|
|
+# This file is part of PopuFare.
|
|
|
+#
|
|
|
+# PopuFare is free software: you can redistribute it and/or modify
|
|
|
+# it under the terms of the GNU Affero General Public License as published by
|
|
|
+# the Free Software Foundation, either version 3 of the License, or
|
|
|
+# (at your option) any later version.
|
|
|
+#
|
|
|
+# PopuFare is distributed in the hope that it will be useful,
|
|
|
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
|
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
|
+# GNU Affero General Public License for more details.
|
|
|
+#
|
|
|
+# You should have received a copy of the GNU Affero General Public License
|
|
|
+# along with PopuFare. If not, see <https://www.gnu.org/licenses/>.
|
|
|
+#
|
|
|
+
|
|
|
+export BASEDIR="/home/bus"
|
|
|
+
|
|
|
+. $BASEDIR/bin/common_values.sh
|
|
|
+
|
|
|
+usage() {
|
|
|
+ echo -e "Usage:" 1>&2
|
|
|
+ echo -e "\t$0 line_number" 1>&2
|
|
|
+ exit 1
|
|
|
+}
|
|
|
+
|
|
|
+# If the supplied line number is not numeric, complain!
|
|
|
+#
|
|
|
+if echo "$1" | egrep -v '^[0-9]+$' > /dev/null; then usage; fi
|
|
|
+
|
|
|
+# Create a temporary file to hold the selected config line for disection
|
|
|
+#
|
|
|
+tmpfile=`mktemp /tmp/unpack_server_tmp.XXXXXX`
|
|
|
+
|
|
|
+# Disect the server list and get the first N lines, and then the last one line of that set will be line N
|
|
|
+#
|
|
|
+head -n "$1" "$SERVER_LIST_FILE" | tail -n 1 > $tmpfile
|
|
|
+
|
|
|
+# Make sure that we have the expected six fields in this line
|
|
|
+#
|
|
|
+if [ `cat $tmpfile | tr '\t' '\n' | wc -l` -ne 6 ]; then
|
|
|
+ echo "Line $1 does not contain the required 6 tab-delimited fields. Not altering server config." 1>&2;
|
|
|
+ rm -f $tmpfile;
|
|
|
+ usage;
|
|
|
+fi
|
|
|
+
|
|
|
+# Extract the target username...
|
|
|
+#
|
|
|
+ssh_target_user="`cat $tmpfile | cut -f2`"
|
|
|
+
|
|
|
+# Extract the target hostname...
|
|
|
+#
|
|
|
+ssh_target_host="`cat $tmpfile | cut -f3`"
|
|
|
+
|
|
|
+# Now, take the username and hostname and make a ssh_target
|
|
|
+#
|
|
|
+ssh_target="$ssh_target_user@$ssh_target_host"
|
|
|
+
|
|
|
+# If they pass the "smell test", we will proceed, otherwise we bail...
|
|
|
+#
|
|
|
+if echo "$ssh_target" | egrep -qv "$SSH_TARGET_VALIDITY_CHECK"; then
|
|
|
+ echo "Target specified on line $1 appears to be invalid \"$ssh_target\". Not altering server config." 1>&2
|
|
|
+ rm -f $tmpfile
|
|
|
+ usage
|
|
|
+fi
|
|
|
+
|
|
|
+# If we've gotten this far, we are going to go through with it...
|
|
|
+#
|
|
|
+
|
|
|
+# Extract and save our description...
|
|
|
+#
|
|
|
+cat $tmpfile | cut -f1 > $SYNC_DESC_FILE
|
|
|
+
|
|
|
+# Save our new sync target "user@host"...
|
|
|
+#
|
|
|
+echo "$ssh_target" > $SYNC_TARGET_FILE
|
|
|
+
|
|
|
+# Extract and save our new port number...
|
|
|
+#
|
|
|
+cat $tmpfile | cut -f4 > $SYNC_PORT_FILE
|
|
|
+
|
|
|
+# Here we need to first put in our target hostname, followed by a space (but no newline)
|
|
|
+#
|
|
|
+
|
|
|
+echo -n "$ssh_target_host " > $SYNC_KNOWN_HOSTS
|
|
|
+# then append the 5th field (target host's public key)
|
|
|
+#
|
|
|
+cat $tmpfile | cut -f5 >> $SYNC_KNOWN_HOSTS
|
|
|
+
|
|
|
+# and set the correct permissions
|
|
|
+#
|
|
|
+chmod $PACKAGE_SSH_MILD_FILE_PERMISSIONS $SYNC_KNOWN_HOSTS
|
|
|
+
|
|
|
+# Here we need to put the correct preface/header on the private key
|
|
|
+
|
|
|
+echo "-----BEGIN RSA PRIVATE KEY-----" > $SYNC_PRIVATE_KEY
|
|
|
+
|
|
|
+# next we need to take the 6th field, and reconstitute all the spaces into newlines
|
|
|
+#
|
|
|
+cat $tmpfile | cut -f6 | tr ' ' '\n' >> $SYNC_PRIVATE_KEY
|
|
|
+
|
|
|
+# add on the terminating line
|
|
|
+
|
|
|
+echo "-----END RSA PRIVATE KEY-----" >> $SYNC_PRIVATE_KEY
|
|
|
+
|
|
|
+# and set the correct permissions
|
|
|
+#
|
|
|
+chmod $PACKAGE_SSH_STRICT_FILE_PERMISSIONS $SYNC_PRIVATE_KEY
|
|
|
+
|
|
|
+# remove our temporary file
|
|
|
+#
|
|
|
+rm -f $tmpfile
|
|
|
+
|
|
|
+# sync the secondary storage
|
|
|
+#
|
|
|
+sync
|
|
|
+
|
|
|
+# and signal that we want to close any open SSH sessions and start a new one with the new server
|
|
|
+#
|
|
|
+abort_tunnel_and_update
|
|
|
+
|