Сценарий SFTP на Bash - Слишком много попыток входа выглядит как атака DOS

Мне удалось написать сценарий bash, основанный на чьей-то предыдущей работе, для отправки файлов через SFTP в приложение Limoma GoAnywhere. Я плохо владею bash или шеллом. К сожалению, приложение GoAnywhere, которое я пытаюсь сохранить в файлах SFTP, продолжает заносить в черный список 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
0
задан 23 August 2018 в 00:56
1 ответ

Это кажется действительно сложным. Есть ли преимущество использования sftp вместо scp?

Вы должны иметь возможность работать со всеми файлами в одном соединении с

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

. filearray - это массив файлов, которые вы хотите передать из вашего скрипта. Он расширяется до имен файлов, которые вы хотите передать. Он расширяется до

scp -p "${filearray[1]}" "${filearray[2]}" ... "${filearray[n]}" $FTPUSER@$FTPSERVER:$FILEPATH
4
ответ дан 4 December 2019 в 11:42

Теги

Похожие вопросы