2017-12-03 2 views
0

Ich verwende ein Bash-Skript (https://github.com/johnnywoof/FTP-Bash-Backup), um mein Debian-WWW-Verzeichnis auf einem FTP-Server zu sichern. alles lief gut, aber die Übertragung wurde von der Firewall blockiert. Das Skript verwendet jedes Mal einen separaten Port, damit ich nicht durch die Firewall entsperren kann. Gibt es eine Möglichkeit, einen Port anzugeben?Server zu Server Dateitransfer Port?

Der Bash-Skript

# FTP server settings 
USERNAME="" 
PASSWORD="" 
SERVER="" 
PORT=21 

BACKUPDIR="/" 

ndays=7 

LOCAL_DIRECTORY="/home" 

TEMP_BACKUP_STORE="/tmp" 

ENCRYPT_BACKUP=false 

AES_PASSWORD_FILE="" 

timestamp=$(date --iso) 

backup_remote_file_name="$timestamp.tar.gz" 
backup_file="$TEMP_BACKUP_STORE/$backup_remote_file_name" 

MM=`date --date="$ndays days ago" +%b` 
DD=`date --date="$ndays days ago" +%d` 

echo "Removing files older than $MM $DD" 

listing=`ftp -i -n $SERVER $PORT <<EOMYF 
user $USERNAME $PASSWORD 
binary 
cd $BACKUPDIR 
ls 
quit 
EOMYF` 

lista=($listing) 

for ((FNO=0; FNO<${#lista[@]}; FNO+=9));do 
    # month (element 5), day (element 6) and filename (element 8) 
    #echo Date ${lista[`expr $FNO+5`]} ${lista[`expr $FNO+6`]}   File: ${lista[`expr $FNO+8`]} 

    if [ ${lista[`expr $FNO+5`]}=$MM ]; 
    then 
     if [[ ${lista[`expr $FNO+6`]} -lt $DD ]]; 
     then 
      echo "Removing ${lista[`expr $FNO+8`]}" 
      ftp -i -n $SERVER $PORT <<EOMYF2 
      user $USERNAME $PASSWORD 
      binary 
      cd $BACKUPDIR 
      delete ${lista[`expr $FNO+8`]} 
      quit 
      EOMYF2 
     fi 
    fi 
done 

echo "Creating backup..." 

tar -czf $backup_file $LOCAL_DIRECTORY 

if [ "$ENCRYPT_BACKUP" == "true" ] 
then 
    echo "Encrypting backup using OpenSSL..." 
    output_encrypted_file="$backup_file.enc" 
    openssl enc -aes-256-cbc -salt -in $backup_file -out $output_encrypted_file -pass file:$AES_PASSWORD_FILE 
    rm $backup_file 
    backup_file=$output_encrypted_file 
fi 

echo "Uploading backup $backup_file ..." 

ftp -n -i $SERVER $PORT <<EOF 
user $USERNAME $PASSWORD 
cd $BACKUPDIR 
put $backup_file $backup_remote_file_name 
quit 
EOF 

echo "Deleting temporary files..." 
rm $backup_file 
echo "Backup complete." 
+0

Das Skript immer auf den gleichen Port verbinden sollte - Port 21 Sagen Sie Ihren lokalen (Client) Firewall Outbound (Client) Datenverkehr auf Port 21 auf dem Server gerichtet ist blockiert? – hnefatl

+0

nein es mit zufälligen Port, 21 Port ist entsperrt –

+0

Btw .: Bitte werfen Sie einen Blick: http://www.shellcheck.net/ – Cyrus

Antwort