Я хотел бы передать несколько файлов на удаленный сервер в качестве входных данных для команд, выполняемых на удаленном сервере, через 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 […]