Как бороться с ошибкой curl 2, вызванной «Не удалось получить баннер»?

Как бороться с ошибкой curl 2, вызванной «Не удалось получить баннер»?

У меня четыре Raspberry Pie, на всех работает curl 7.64.0. Каждый Pi загружает изображение с веб-камеры на один и тот же хост каждые две минуты. Это 30 изображений в час для четырех Pie. Все это делается с помощью простых скриптов оболочки bash. Аутентификация на хосте выполняется с помощью открытого ключа.

Обычно это работает нормально, но время от времени все или большинство Pie выходят из строя с ошибкой curl 2, которая, согласно журналу, вызвана: «Ошибка установления сеанса ssh: -13, Ошибка получения баннера».

Я понимаю, что это не вызвано ошибкой в ​​curl, однако мне интересно, есть ли способ обойти эту ошибку с помощью curl.

Сейчас я использую следующие параметры:

--connect-timeout 10 --max-time 120 --retry 5 Я установил max-time на 120, потому что изображения загружаются каждые две минуты. Остальные два — просто мои догадки о том, что может сработать.

Вот полная команда curl:

    curl -s -v -u me: \
     --connect-timeout 10 \
     --max-time 120 \
     --retry 5 \
     --pubkey ~/.ssh/id_rsa.pub \
     -T $file $host >> $log 2>&1

Где:

$file is: the file to be uploaded
$host is: host=sftp://ftp.me.com/~/public_html/
$log  is: the local log file

Вот подробный вывод curl:

*   Trying nnn.nnn.nnn.nnn...
* TCP_NODELAY set
* Expire in 200 ms for 4 (transfer 0x3698b0)
* Connected to ftp.mgnewman.com (nnn.nnn.nnn.nnn) port 22 (#0)
* Failure establishing ssh session: -13, Failed getting banner
* Closing connection 0

Есть ли способ лучше?

решение1

Это не совсем ответ на вопрос, но это одно из решений проблемы. Я окружил команду curl циклом do. Похоже, curl не считает ошибку "Failed getting banner" ошибкой соединения, поэтому он не "повторяет попытку", а просто отключается по тайм-ауту. Вот что я использую:

for i in {1..3}
 do

    curl -s -v -u mgnewman: \
     --connect-timeout 25 \
     --max-time 40 \
     --retry 3 \
     --pubkey ~/.ssh/id_rsa.pub \
     -T $file $host >> $log 2>&1

        err=$?
        echo $'\n'"`date`" Upload Ended "$err" - $(hostname) >> "$log"


        if [ $err -eq 0 ] ; then
                break
        fi
done

Это некрасиво, но больше нет ошибок curl 2 ни на одном из четырех Pie.

Связанный контент