Запустить удаленный скрипт для локального файла через SSH

Запустить удаленный скрипт для локального файла через SSH

У меня есть удаленная машина с бинарным файлом Linux, который принимает ряд аргументов и текстовый файл. Вывод программы записывается в stdout, который я всегда записываю в текстовый файл. Я обнаружил, что копирую файл данных на удаленную машину, выполняю команду в этом файле и копирую полученный файл обратно. Это занимает много времени и подвержено ошибкам.

Возможно ли с помощью SSH и стандартных инструментов Linux запустить удаленный двоичный файл через SSH в локальном файле без его предварительного копирования на удаленную машину?

В идеале я хотел бы иметь bash-скрипт на своей локальной машине. Я указываю файл данных в качестве аргумента, и он выполняет все SSH-подключения, отправку данных и т. д. и выводит результат на stdout локально.

Моя локальная машина — Mac OS X, а удаленная — Linux. Нет, я не могу заставить исполняемый файл Linux работать на Mac OS X.

Обновление: Инструмент на удаленной машинеможетчтение из stdin.

решение1

Если инструмент может читать stdinвместотекстовый файл и передает его вывод через stdout, этот bashсинтаксис должен запустить его удаленно без необходимости копирования каких-либо файлов:

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

Примечание: некоторым командам требуется специальная опция или аргумент (например, -) для чтения stdin; некоторые читают stdin, пока не указан входной файл. Я ничего не знаю о вашем инструменте, так что это общий подход, который вам, возможно, придется скорректировать.

Перенаправление вывода в локальный файл с помощью >или (local) teeтакже будет работать:

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

Пример: remote catобъединяет локальный и удаленный /etc/hosts:

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

Связанный контент