
Tengo cuatro Raspberry Pies, todos con curl 7.64.0. Cada Pi carga una imagen de cámara web al mismo host cada dos minutos. Son 30 imágenes por hora para cuatro Pies. Todo esto se hace con simples scripts de shell bash. La autenticación con el host se realiza mediante clave pública.
Normalmente, esto funciona bien, pero de vez en cuando todos o la mayoría de los Pies fallan con el error curl 2 que, según el registro, se debe a: "Error al establecer la sesión ssh: -13, no se pudo obtener el banner".
Entiendo que esto no se debe a un error en curl, sin embargo, me pregunto si hay alguna manera de superar el error con curl.
En este momento estoy usando los siguientes parámetros:
--connect-timeout 10 --max-time 120 --retry 5 Configuré el tiempo máximo en 120 porque las imágenes se cargan cada dos minutos. Los otros dos son sólo conjeturas de mi parte sobre lo que podría funcionar.
Aquí está el comando curl completo:
curl -s -v -u me: \
--connect-timeout 10 \
--max-time 120 \
--retry 5 \
--pubkey ~/.ssh/id_rsa.pub \
-T $file $host >> $log 2>&1
Dónde:
$file is: the file to be uploaded
$host is: host=sftp://ftp.me.com/~/public_html/
$log is: the local log file
Aquí está la salida de curl detallada:
* 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
¿Existe una mejor manera?
Respuesta1
Esta no es una gran respuesta a la pregunta, pero es una solución al problema. He rodeado el comando curl con un bucle do. Parece que curl no considera que el error "Error al obtener el banner" sea un error de conexión, por lo que no lo "vuelve a intentar"; simplemente se agota el tiempo. Esto es lo que estoy usando:
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
Es feo, pero ya no hay errores curl 2 en ninguno de los cuatro Pies.