「バナーの取得に失敗しました」によって発生する curl エラー 2 に対処するにはどうすればよいですか?

「バナーの取得に失敗しました」によって発生する curl エラー 2 に対処するにはどうすればよいですか?

私は 4 台の Raspberry Pie を持っていて、すべて curl 7.64.0 を実行しています。各 Pi は 2 分ごとに同じホストにウェブカメラ画像をアップロードします。つまり、4 台の Pi で 1 時間あたり 30 枚の画像になります。これはすべて、単純な bash シェル スクリプトで行われます。ホストとの認証は公開キーで行われます。

通常、これは正常に動作しますが、時々、すべてまたはほとんどの Pie が curl エラー 2 で失敗します。ログによると、これは「ssh セッションの確立に失敗しました: -13、バナーの取得に失敗しました」が原因です。

これは curl のエラーが原因ではないことは理解していますが、curl でエラーを克服できる方法があるのか​​疑問に思っています。

現在、次のパラメータを使用しています。

--connect-timeout 10 --max-time 120 --retry 5 画像は 2 分ごとにアップロードされるため、max-time を 120 に設定しました。他の 2 つは、うまくいくかどうかの推測にすぎません。

完全な 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

これは質問に対する答えとしては大したものではないですが、問題の解決策の 1 つです。curl コマンドを do ループで囲みました。curl は「バナーの取得に失敗しました」というエラーを接続エラーとは見なさないため、「再試行」は行われず、タイムアウトするだけであるようです。私が使用しているのは次のとおりです。

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

醜いですが、4 つの Pie のいずれにも curl 2 エラーはなくなりました。

関連情報