
У меня есть удаленная машина с бинарным файлом 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'