Назад | Перейти на главную страницу

конвейер несколько файлов, одно соединение ssh, удаленные команды

Я хотел бы передать несколько файлов на удаленный сервер в качестве входных данных для команд, выполняемых на удаленном сервере, через ssh, но разрешено только одно соединение / команда ssh. (В удаленном файле authorized_keys указано «command = ...», поэтому с помощью этого ключа на удаленном конце может быть запущена только одна команда / сценарий).

Возможно ли иметь настройку, в которой несколько файлов помещаются в один и тот же канал - я рассматривал их tar'ing и имел некоторую логику в удаленном скрипте / untar для разделения файлов на отдельные команды

Первоначальная настройка была примерно такой:

cat file1 | ssh -i identity remote.host 'remote command1 <'
cat file2 | ssh -i identity remote.host 'remote command2 <'
...etc

Используя tar, это может быть что-то вроде

tar cf - file1 file2 file3 | ssh -i identity remote.host 'remote command.sh <'

Удаленный сценарий должен иметь возможность извлекать файлы один за другим и передавать данные в отдельные команды, но я не уверен, как этого добиться.

Если границы между файлами не имеют значения, просто cat file1 file2 | ssh …. Если они это сделают, используйте tar. На самом деле это очень близко к тому, для чего он был изобретен и что именно он делает.

Другой вариант - настроить именованный канал, который будет поддерживать соединение ssh открытым с файловым узлом для его ввода. Вы можете продолжать сбрасывать вещи по своему желанию.

редактировать: Пример использования tar:

На стороне получателя внутри скрипта, который запускается как удаленная команда, переместитесь туда, где вы хотите, чтобы файлы были извлечены, а затем прочитайте их:

#!/bin/bash
cd /path/to/extract/destination
cat - | tar x

А на отправляющей стороне:

tar c file1 file1 | ssh […]