Ejecute un script remoto en un archivo local a través de SSH

Ejecute un script remoto en un archivo local a través de SSH

Tengo una máquina remota con un binario de Linux que acepta varios argumentos y un archivo de texto. La salida de un programa se escribe en la salida estándar que yo siempre escribo en un archivo de texto. Me encontré copiando un archivo de datos a la máquina remota, ejecutando el comando en ese archivo y copiando el archivo resultante nuevamente. Esto requiere mucho tiempo y es propenso a errores.

¿Es posible con SSH y las herramientas estándar de Linux ejecutar un binario remoto a través de SSH en un archivo local sin copiarlo primero en la máquina remota?

Idealmente, me gustaría tener un script bash en mi máquina local. Especifico el archivo de datos como argumento y realiza toda la conexión SSH, envío de datos, etc. y genera el resultado en la salida estándar localmente.

Mi máquina local es Mac OS X y la remota es Linux. No, no puedo hacer que el binario de Linux funcione en Mac OS X.

Actualización: la herramienta en la máquina remotapoderleer desde la entrada estándar.

Respuesta1

Si la herramienta puede leer stdinen lugar deun archivo de texto y proporciona su salida a través de la salida estándar, esta bashsintaxis debería ejecutarlo de forma remota sin la necesidad de copiar ningún archivo:

< "/local_path/to/input_file" ssh user@remote 'the_tool -some_option1 -option2'

Nota: algunos comandos necesitan una opción o argumento especial (p. ej. -) para leer la entrada estándar; algunos leen stdin mientras no se especifica ningún archivo de entrada. No sé nada acerca de su herramienta, por lo que este es un enfoque genérico que quizás deba ajustar.

La redirección de la salida a un archivo local con >o (local) teetambién funcionará:

< "/local_path/to/input_file" ssh user@remote 'the_tool -some_option1 -option2' | tee "/local_path/to/output_file"

Ejemplo: remoto catconcatena local y remoto /etc/hosts:

< "/etc/hosts" ssh user@remote 'cat - /etc/hosts'

información relacionada