![Запустить удаленный скрипт для локального файла через SSH](https://rvso.com/image/1552761/%D0%97%D0%B0%D0%BF%D1%83%D1%81%D1%82%D0%B8%D1%82%D1%8C%20%D1%83%D0%B4%D0%B0%D0%BB%D0%B5%D0%BD%D0%BD%D1%8B%D0%B9%20%D1%81%D0%BA%D1%80%D0%B8%D0%BF%D1%82%20%D0%B4%D0%BB%D1%8F%20%D0%BB%D0%BE%D0%BA%D0%B0%D0%BB%D1%8C%D0%BD%D0%BE%D0%B3%D0%BE%20%D1%84%D0%B0%D0%B9%D0%BB%D0%B0%20%D1%87%D0%B5%D1%80%D0%B5%D0%B7%20SSH.png)
У меня есть удаленная машина с бинарным файлом 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'