¿Cómo upload un file y luego verificarlo y ejecutar algunos otros commands usando solo ssh, cat y diff en una sola session de SSH?

El objective es cambiar algunos parameters en una gran cantidad de dispositivos en conexiones que son poco confiables (inalámbricas), de acuerdo con csv que tiene el formatting: IP, parámetro, parámetro

Me gustaría crear un script bash que cargue un file, luego verifique el contenido del mismo con la copy local y luego ejecute otros commands utilizando solo bash, ssh, cat y diff en el extremo remoto. Solo las herramientas básicas están disponibles en los serveres remotos de Linux (Busybox), y hay miles de ellas, por lo que el escalado es importante. Preferiría mucho hacer todo esto en una sola session SSH, donde la authentication solo tiene que suceder de una manera y de una vez. Pretenda por el momento que la security no es un problema. Estoy buscando cómo escalar la distribución de key pública de rsa a todos estos, pero por ahora, quiero que esto funcione con authentication de contraseña. Por favor, no hagas bromas sobre las prácticas de security. Tal vez haya una forma mucho más fácil de lograr el objective mencionado anteriormente. Si es así, por favor comparte. Gracias.

Entonces los pasos son:

  1. Inicie session en el cuadro remoto.
  2. Copie el file local en el cuadro remoto en un directory específico.
  3. Ejecute diff, o algún tipo de verificación de errores de copy de files.
  4. Si es un error, detenga el script, de lo contrario continúe.
  5. Ejecuta otros commands en el cuadro remoto.
  6. Envía los resultados de los commands a un file local.
  7. Cierra la session
  8. Enjuague y repita.

Debajo hay una especie de pseudocódigo. Pero te da una idea de lo que estoy tratando de hacer. diff no ve el resultado de catalogar el file local, por lo que piensa que no son lo mismo.

IFS=\, while read IP PARAM1 PARAM2; do cat /home/user/uploadscript.sh | sshpass -p $password ssh -v -o StrictHostKeyChecking=no -l uname 192.168.xx 'cat > /tmp/script.sh && cat | diff -sb - /tmp/script.sh && IP="IP" && P1="$PARAM1" && P2="$PARAM2" && ./script.sh' done < list_of_ipaddresses.txt >> log.txt 

El único command que necesitas es scp . Como cualquier otro command, scp devuelve el código de estado 0 para indicar éxito o no cero para indicar un error. Si scp devuelve 0, el file se cargó correctamente.

 if scp …; then echo >&2 "The file was uploaded successfully." else echo >&2 "There was an error uploading the file." fi