Enorme atraso na resposta do script ao usar o SFTP com expectativa

2

Estou usando um script para chamar o serviço SFTP para buscar alguns logs do servidor remoto. Isso funciona bem no cenário normal, mas, tenho notado um atraso muito longo de cerca de 30 minutos ou mais em alguns dos casos, quando o servidor espera a senha. A seguir está o código que estou usando:

#!/bin/bash

dirdate='/bin/date +%Y%m%d -d "1 day ago"'

INPUT_DIR="/root/SDP_BHC/input"
CREDENTIALS_FILE="/root/FTP_TEST/Credentials.csv"

# Loop to read credentials and other details from an external file.
while IFS=','; read node_id node_name ip1 ip2 ip3 user1 pass1 user2 pass2 user3 pass3 installed location circle sdpno hwtype
do

        # Generate Input Directory for IP-Node
        mkdir -p $INPUT_DIR/"$node_id"/"$node_name"/IP/"$dirdate"

        echo -e "\n[INFO] Node IP: $ip1"
        echo -e "=============================\n"

        SOURCE_FILE="/var/opt/fds/statistics/*PSC-TrafficHandler_8*1_A_*_System*$dirdate*stat"
        TARGET_DIR="$INPUT_DIR/$node_id/$node_name/IP/$dirdate"


set prompt "(%|#|\$|%\]) $"
spawn /usr/bin/sftp $user1@$ip1
expect { "$prompt" }
#expect "Are you sure you want to continue connecting (yes/no)?"
#bin prompt
send "yes\r"
#expect "Password:"
expect { "$prompt" }
send "$pass1\r"
expect "sftp>"
send "mget $SOURCE_FILE $TARGET_DIR\r"
set timeout 2000
expect "sftp>"
send "bye\r"
EOD

.
.
.

done < $CREDENTIALS_FILE

O script trava em alguns casos, como quando a senha atualizada no CREDENTIALS_FILE não está correspondendo (devido à alteração de senha no servidor de origem de onde o arquivo está sendo buscado). Nesse caso, a entrada de senha recebe duas respostas (sim e $ pass1) e, em seguida, trava para o terceiro prompt de senha, pois as duas primeiras estão erradas. Aqui, ele fica pendurado por um longo tempo (em alguns casos, não é outra confusão que eu tenho porque isso não acontece nesses casos).

De qualquer forma, seja qual for o caso, talvez eu queira fazer o tempo limite da sessão SFTP rapidamente se qualquer um desses cenários acontecer. Como faço a sessão para obter um tempo limite rapidamente se as senhas não coincidirem? Eu já estou usando um timeout . Para uma sessão normal, meu script leva no máximo 30-35 segundos para conectar-se aos servidores e fazer o FTP dos arquivos para a máquina local.

Alguém poderia fornecer algumas dicas sobre como corrigir esse problema?

    
por Ankit Vashistha 20.08.2015 / 07:39

1 resposta

2

Você pode adicionar ao comando sftp a opção

-o NumberOfPasswordPrompts=1

para pará-lo pedindo duas vezes por senhas. Você também pode tentar usar

-o ConnectTimeout=20
-o ConnectionAttempts=1
    
por 20.08.2015 / 09:33