2017-12-03 28 views
0

私はDebian wwwディレクトリをftpサーバにバックアップするためにbashスクリプト(https://github.com/johnnywoof/FTP-Bash-Backup)を使用します。すべてうまくいっていますが、ファイアウォールで転送がブロックスクリプトは毎回別のポートを使用しているため、ファイアウォールでブロックを解除することはできません。 ポートを指定する方法はありますか?パッシブモードへサーバーからサーバーへのファイル転送ポート?

bashスクリプト

# 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

スクリプトは常に同じポートに接続する必要があります - ポート21.あなたのローカル(クライアント)のファイアウォールがサーバー上のポート21に向けアウトバウンド(クライアント)のトラフィックをブロックしていると言っていますか? – hnefatl

+0

ランダムポートを使用していない場合、21ポートはブロックされていません –

+0

Btw:ご覧ください:http://www.shellcheck.net/ – Cyrus

答えて

関連する問題