3

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

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

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

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

Обновление: инструмент на удаленном компьютере может читать со стандартного ввода.

1 ответ1

1

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

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

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

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

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

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

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

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .