|
|
@@ -1,34 +1,49 @@
|
|
|
#!/bin/bash
|
|
|
-# info: add backup sftp host
|
|
|
-# options: HOST USERNAME PASSWORD [PATH] [PORT]
|
|
|
+# info: add backup host
|
|
|
+# options: TYPE HOST USERNAME PASSWORD [PATH] [PORT]
|
|
|
#
|
|
|
-# The function adds sftp host for system backups
|
|
|
+# The function adds backup host
|
|
|
+
|
|
|
|
|
|
#----------------------------------------------------------#
|
|
|
# Variable&Function #
|
|
|
#----------------------------------------------------------#
|
|
|
|
|
|
# Argument defenition
|
|
|
-sftp_host=$1
|
|
|
-sftp_user=$2
|
|
|
-password=$3
|
|
|
-sftp_path=${4-backup}
|
|
|
-sftp_port=${5-22}
|
|
|
+type=$1
|
|
|
+host=$2
|
|
|
+user=$3
|
|
|
+password=$4
|
|
|
+path=${5-/backup}
|
|
|
+port=$6
|
|
|
|
|
|
# Includes
|
|
|
source $VESTA/func/main.sh
|
|
|
source $VESTA/conf/vesta.conf
|
|
|
|
|
|
# Hiding password
|
|
|
-A3='******'
|
|
|
+A4='******'
|
|
|
EVENT="$DATE $TIME $SCRIPT $A1 $A2 $A3 $A4 $A5 $A6 $A7 $A8 $A9"
|
|
|
|
|
|
-# sftp command function
|
|
|
+# Defining ftp command function
|
|
|
+ftpc() {
|
|
|
+ ftp -p -n $host $port <<EOF
|
|
|
+ quote USER $user
|
|
|
+ quote PASS $password
|
|
|
+ binary
|
|
|
+ $1
|
|
|
+ $2
|
|
|
+ $3
|
|
|
+ quit
|
|
|
+EOF
|
|
|
+}
|
|
|
+
|
|
|
+# Defining sftp command function
|
|
|
sftpc() {
|
|
|
expect -f "-" <<EOF "$@"
|
|
|
set count 0
|
|
|
spawn /usr/bin/sftp -o StrictHostKeyChecking=no -o \
|
|
|
- Port=$sftp_port $sftp_user@$sftp_host
|
|
|
+ Port=$port $user@$host
|
|
|
expect {
|
|
|
"password:" {
|
|
|
send "$password\r"
|
|
|
@@ -81,42 +96,78 @@ EOF
|
|
|
# Verifications #
|
|
|
#----------------------------------------------------------#
|
|
|
|
|
|
-check_args '3' "$#" "HOST USERNAME PASSWORD [PATH] [PORT]"
|
|
|
-which expect >/dev/null 2>&1
|
|
|
-if [ $? -ne 0 ];then
|
|
|
- echo "Error: expect utility not found"
|
|
|
- log_event "$E_NOTEXIST" "$EVENT"
|
|
|
- exit $E_NOTEXIST
|
|
|
-fi
|
|
|
+check_args '4' "$#" "TYPE HOST USERNAME PASSWORD [PATH] [PORT]"
|
|
|
+validate_format 'host' 'user'
|
|
|
is_password_valid
|
|
|
+if [ "$type" = 'sftp' ]; then
|
|
|
+ which expect >/dev/null 2>&1
|
|
|
+ if [ $? -ne 0 ];then
|
|
|
+ echo "Error: expect utility not found"
|
|
|
+ log_event "$E_NOTEXIST" "$EVENT"
|
|
|
+ exit $E_NOTEXIST
|
|
|
+ fi
|
|
|
+fi
|
|
|
+
|
|
|
|
|
|
#----------------------------------------------------------#
|
|
|
# Action #
|
|
|
#----------------------------------------------------------#
|
|
|
|
|
|
-# Checking network connection and write permissions
|
|
|
-sftmpdir="$sftp_path/vst.bK76A9SUkt"
|
|
|
-sftpc "mkdir $sftp_path" > /dev/null 2>&1
|
|
|
-sftpc "mkdir $sftmpdir" "rmdir $sftmpdir" > /dev/null 2>&1
|
|
|
-rc=$?
|
|
|
-if [[ "$rc" != 0 ]]; then
|
|
|
- case $rc in
|
|
|
- $E_CONNECT) echo "Error: can't login to sftp host";;
|
|
|
- $E_FTP) echo "Error: can't create temp folder on the sftp host";;
|
|
|
- esac
|
|
|
- log_event "$rc" "$EVENT"
|
|
|
- exit "$rc"
|
|
|
+# Checking network connection
|
|
|
+if [ "$type" = 'ftp' ]; then
|
|
|
+ if [ -z $port ]; then
|
|
|
+ port=21
|
|
|
+ fi
|
|
|
+ fconn=$(ftpc 2>&1)
|
|
|
+ ferror=$(echo $fconn |\
|
|
|
+ grep -i -e failed -e error -e "can't" -e "not conn" -e "incorrect")
|
|
|
+ if [ ! -z "$ferror" ]; then
|
|
|
+ echo "Error: can't login to ftp server"
|
|
|
+ log_event "$E_CONNECT" "$EVENT"
|
|
|
+ exit $E_CONNECT
|
|
|
+ fi
|
|
|
+
|
|
|
+ # Checking write permissions
|
|
|
+ ftpc "mkdir $path" > /dev/null 2>&1
|
|
|
+ ftmpdir="$path/vst.bK76A9SUkt"
|
|
|
+ ftp_result=$(ftpc "mkdir $ftmpdir" "rm $ftmpdir"|grep -v Trying)
|
|
|
+ if [ ! -z "$ftp_result" ] ; then
|
|
|
+ echo "$ftp_result"
|
|
|
+ rm -rf $tmpdir
|
|
|
+ echo "Error: can't create $ftmpdir folder on the ftp"
|
|
|
+ log_event "$E_FTP" "$EVENT"
|
|
|
+ exit $E_FTP
|
|
|
+ fi
|
|
|
+fi
|
|
|
+if [ "$type" = 'sftp' ]; then
|
|
|
+ if [ -z $port ]; then
|
|
|
+ port=22
|
|
|
+ fi
|
|
|
+ sftmpdir="$sftp_path/vst.bK76A9SUkt"
|
|
|
+ sftpc "mkdir $sftmpdir" "rmdir $sftmpdir" > /dev/null 2>&1
|
|
|
+ rc=$?
|
|
|
+ if [[ "$rc" != 0 ]]; then
|
|
|
+ case $rc in
|
|
|
+ $E_CONNECT) echo "Error: can't login to sftp host";;
|
|
|
+ $E_FTP) echo "Error: can't create temp folder on the sftp host";;
|
|
|
+ esac
|
|
|
+ log_event "$rc" "$EVENT"
|
|
|
+ exit "$rc"
|
|
|
+ fi
|
|
|
fi
|
|
|
|
|
|
-# Adding sftp backup config file
|
|
|
-echo "HOST='$sftp_host'
|
|
|
-USERNAME='$sftp_user'
|
|
|
-PASSWORD='$password'
|
|
|
-BPATH='$sftp_path'
|
|
|
-PORT='$sftp_port'
|
|
|
-TIME='$TIME'
|
|
|
-DATE='$DATE'" > $VESTA/conf/sftp.backup.conf
|
|
|
-chmod 660 $VESTA/conf/sftp.backup.conf
|
|
|
+
|
|
|
+# Adding backup host
|
|
|
+if [ $type != 'local' ]; then
|
|
|
+ echo "HOST='$host'
|
|
|
+ USERNAME='$user'
|
|
|
+ PASSWORD='$password'
|
|
|
+ BPATH='$path'
|
|
|
+ PORT='$port'
|
|
|
+ TIME='$TIME'
|
|
|
+ DATE='$DATE'" > $VESTA/conf/$type.backup.conf
|
|
|
+ chmod 660 $VESTA/conf/$type.backup.conf
|
|
|
+fi
|
|
|
|
|
|
|
|
|
#----------------------------------------------------------#
|
|
|
@@ -125,9 +176,9 @@ chmod 660 $VESTA/conf/sftp.backup.conf
|
|
|
|
|
|
# Update vesta.conf
|
|
|
if [ -z "$(grep BACKUP_SYSTEM $VESTA/conf/vesta.conf)" ]; then
|
|
|
- echo "BACKUP_SYSTEM='sftp'" >> $VESTA/conf/vesta.conf
|
|
|
+ echo "BACKUP_SYSTEM='$type'" >> $VESTA/conf/vesta.conf
|
|
|
else
|
|
|
- bckp=$(echo "$BACKUP_SYSTEM,sftp" |\
|
|
|
+ bckp=$(echo "$BACKUP_SYSTEM,$type" |\
|
|
|
sed "s/,/\n/g"|\
|
|
|
sort -r -u |\
|
|
|
sed "/^$/d"|\
|