Bash SFTP 脚本 - 过多的登录尝试看起来像是 DOS 攻击

Bash SFTP 脚本 - 过多的登录尝试看起来像是 DOS 攻击

我根据某人以前的工作编写了一个 bash 脚本,通过 SFTP 将文件发送到 Limoma GoAnywhere 应用程序。我不熟悉 bash 或 shell。不幸的是,我尝试通过 SFTP 将文件发送到的 GoAnywhere 应用程序一直将我的原始服务器的 IP 地址列入黑名单。

我得到了一位负责该系统的人员的回复,他告诉我登录尝试次数限制为 60 次,超过此次数系统将视为 DOS 攻击。我不确定这个时间段是多长。

以下脚本的问题在于,它会对发送的每个文件进行登录。我需要在 for 循环之前进行一次登录,然后在关闭连接之前发送数十个文件。这将使用 cron 作业进行控制,大约每小时执行一次。有人可以帮忙重写这个脚本以进行单次连接,而不是多次连接吗?

#!/bin/bash


today=`date +'%k:%M:%S-%m.%d.%Y'`
nowdate=`date +'%d%H%M'`

xferhome="/home/somefolder"
recdir="$xferhome/fax_incoming_prod"
procdir="$xferhome/fax_processed_prod"

# log stuff..
logfile="$xferhome/log/fax_xfer_prod.log"

# clean up log file @ beginning of every month..
if [ $nowdate -eq "091200" ]; then
        rm $logfile
fi

cd ${recdir}

# start
{

filearray=($(ls -ltr *.{pdf,fmi} 2>/dev/null | awk '{print $9}'))
idx=$((${#filearray[*]} - 1))

if [ $((${#filearray[*]})) -eq 0 ]; then
    echo "${today} Nothing found.."
    exit 2
fi

echo "${today} - send"

for ((i=0;i<=${idx};i++)); do
    echo "SFTP'ing .pdf file: ${filearray[${i}]}"
    fname=${filearray[${i}]}
    export fname
    expect <<'END'

        # Expect Variables

        set FTPUSER someusername
        set FNAME $env(fname)
        set FTPSERVER some.server.net
        set FILEPATH Fax_Queue_Prod
        set FTPPASS somepassword

        spawn /usr/bin/sftp -v -oPort=22 $FTPUSER\@$FTPSERVER
        expect "password:"
        send "$FTPPASS\n"
        expect "sftp>"
        send "cd $FILEPATH\n"
        expect "sftp>"
        send "put $FNAME\n"
        expect "sftp>"
        send "quit\n"

END
    echo "Moving ${filearray[${i}]} to processed directory"
    mv ${filearray[${i}]} ${procdir}/.
done

# logit all.. :)
} >>$logfile 2>>$logfile

答案1

这看起来真的很复杂。使用 sftp 代替 scp 有什么好处吗?

您应该能够通过一个连接访问所有文件

scp -p "${filearray[@]}" $FTPUSER@$FTPSERVER:$FILEPATH

filearray是要从脚本中传输的文件数组。它扩展为要传输的文件的名称。它扩展为

scp -p "${filearray[1]}" "${filearray[2]}" ... "${filearray[n]}" $FTPUSER@$FTPSERVER:$FILEPATH

相关内容