Ejecutar un script local en un server remoto utilizando ssh sin tener que preocuparse por las cotizaciones

Así que he estado ejecutando scripts locales bien en un server remoto:

ssh user@server "`cat local-script.sh`" 

Sin embargo, hoy tengo un script que tiene citas simples y dobles en él. Lo que hace que el script falle porque la salida de cat local-script.sh está envuelta en comillas. Sin modificar el script mismo, ¿hay una mejor manera de manejar esto?

Pensé que esto podría funcionar:

 ssh user@server $(<local-script.sh) 

Pero es que no parece hacer nada …

Con el siguiente script de testing:

 #!/bin/bash uname -n a=(bc 'de' f) echo "${#a[@]}" b=(1 "2 3" 4) echo "${#b[@]}" 

La salida debe ser el nombre de host remoto seguido por 4 y 3 cuando se ejecuta utilizando:

 ssh user@server "$(<scriptname)" 

Esto muestra que las comillas dentro de la secuencia de commands se están manejando correctamente. Si las comillas no estaban siendo manejadas correctamente, la salida de numbers sería 5 y 4 debido a la split de palabras. Tenga en count las comillas alnetworkingedor de la sustitución de commands.

Por cierto, el primer command que publicaste no funciona. Las comillas simples evitan que los backticks sean evaluados localmente.

 cat local-script.sh | ssh user@server bash 

o cualquier shell que desee utilizar en lugar de bash

Suponga que la secuencia de commands está en el file script.sh. ¿Qué diablos es el problema con el funcionamiento:

  ssh -T user@remote.host.com <script.sh 

Esto funciona para mí!