diff --git a/dev/n_osync.sh b/dev/n_osync.sh index 60a40bf..c51b5f0 100755 --- a/dev/n_osync.sh +++ b/dev/n_osync.sh @@ -3,7 +3,7 @@ PROGRAM="osync" # Rsync based two way sync engine with fault tolerance AUTHOR="(C) 2013-2016 by Orsiris de Jong" CONTACT="http://www.netpower.fr/osync - ozy@netpower.fr" -PROGRAM_VERSION=1.2-beta +PROGRAM_VERSION=1.2-beta2 PROGRAM_BUILD=2016101701 IS_STABLE=no @@ -116,6 +116,11 @@ function CheckEnvironment { Logger "ssh not present. Cannot start sync." "CRITICAL" exit 1 fi + + if ! type sshpass > /dev/null 2>&1 ; then + Logger "sshpass not present. Cannot use password authentication." "CRITICAL" + exit 1 + fi fi if ! type rsync > /dev/null 2>&1 ; then @@ -161,8 +166,8 @@ function CheckCurrentConfigAll { fi #TODO(low): Add runtime variable tests (RSYNC_ARGS etc) - if [ "$REMOTE_OPERATION" == "yes" ] && [ ! -f "$SSH_RSA_PRIVATE_KEY" ]; then - Logger "Cannot find rsa private key [$SSH_RSA_PRIVATE_KEY]. Cannot connect to remote system." "CRITICAL" + if [ "$REMOTE_OPERATION" == "yes" ] && ([ ! -f "$SSH_RSA_PRIVATE_KEY" ] && [ ! -f "$SSH_PASSWORD_FILE" ]); then + Logger "Cannot find rsa private key [$SSH_RSA_PRIVATE_KEY] nor password file [$SSH_PASSWORD_FILE]. No authentication method provided." "CRITICAL" exit 1 fi } @@ -1658,7 +1663,10 @@ function Init { fi if [ "$SSH_RSA_PRIVATE_KEY" == "" ]; then - SSH_RSA_PRIVATE_KEY=~/.ssh/id_rsa + if [ ! -f "$SSH_PASSWORD_FILE" ]; then + # Assume that there might exist a standard rsa key + SSH_RSA_PRIVATE_KEY=~/.ssh/id_rsa + fi fi # remove everything before '@' @@ -1689,7 +1697,7 @@ function Init { INITIATOR_SYNC_DIR="${INITIATOR_SYNC_DIR/#\~/$HOME}" TARGET_SYNC_DIR="${TARGET_SYNC_DIR/#\~/$HOME}" SSH_RSA_PRIVATE_KEY="${SSH_RSA_PRIVATE_KEY/#\~/$HOME}" - + SSH_PASSWORD_FILE="${SSH_PASSWORD_FILE/#\~/$HOME}" ## Replica format ## Why the f*** does bash not have simple objects ? @@ -1827,6 +1835,7 @@ function Usage { echo "--initiator=\"\" Master replica path. Will contain state and backup directory (is mandatory)" echo "--target=\"\" Local or remote target replica path. Can be a ssh uri like ssh://user@host.com:22//path/to/target/replica (is mandatory)" echo "--rsakey=\"\" Alternative path to rsa private key for ssh connection to target replica" + echo "--password-file=\"\" If no rsa private key is used for ssh authentication, a password file can be used" echo "--instance-id=\"\" Optional sync task name to identify this synchronization task when using multiple targets" echo "" echo "Additionaly, you may set most osync options at runtime. eg:" @@ -1956,6 +1965,10 @@ for i in "$@"; do SSH_RSA_PRIVATE_KEY=${i##*=} opts=$opts" --rsakey=\"$SSH_RSA_PRIVATE_KEY\"" ;; + --password-file=*) + SSH_PASSWORD_FILE=${i##*=} + opts=$opts" --password-file\"$SSH_PASSWORD_FILE\"" + ;; --instance-id=*) INSTANCE_ID=${i##*=} opts=$opts" --instance-id=\"$INSTANCE_ID\"" @@ -2041,9 +2054,9 @@ opts="${opts# *}" GetLocalOS InitLocalOSSettings - CheckEnvironment PreInit Init + CheckEnvironment PostInit if [ $_QUICK_SYNC -lt 2 ]; then CheckCurrentConfig