Описание тега spanish-citizens
ТЛ;ДР, как я могу исправить эту командную строку шаблона, который терпит неудачу, когда кошка (на стороне клиента) соперничает с SSH запросит пароль?
{ Эхо некоторые вещи; кошка; } | сервер SSH кот
{ Эхо некоторые вещи; кошка; } | сервер SSH ЛС
Я не прошу о создании общественных/частных ключей. Я не хочу потреблять стандартного ввода заранее, так как удаленная команда может быть то, что игнорирует его stdin (в этом случае, заставляя пользователя введите ^D-это боль). Я не хочу, чтобы пользователю придется указывать параметр шаблона, чтобы указать, является ли или не удаленная команда будет читать его stdin. Мне нужен шаблон, чтобы работать независимо от наличия или отсутствия пульта ДУ, читает его stdin.
Подробности: я хочу написать клиента и на стороне сервера фантики для команды выполняются удаленно через SSH. Команда может быть любая команда выбора пользователя. Цель фантики-это настройка окружения команды. Клиентские оболочки должен послать небольшое количество данных на стороне сервера фантик, но я не хочу, чтобы отправить эти данные в командной строке (я хочу отправить его по почте).
Вот пример, как это можно назвать:
wrapper1 $ рать wrapper2 ш-C файл "кошка>"
Эти данные передаются на удаленную сторону
^Д
Wrapper1 вычисляет некоторые данные, передает его wrapper2, который настраивает среду перед выполняющейся ш. Кот читает из stdin и пишет в файл на удаленной стороне.
Чтобы достичь этого, я хочу, чтобы на стороне клиента обертку, чтобы придать некоторым данным, в начале потока stdin поток, который направляется стороне сервера фантик. Что лишние будут использоваться данные из stdin по серверной части оболочки до реальной команды.
После вводят данные были отправлены и потребляемого, я хочу, трубопровода ввода в удаленную команду, чтобы быть, как было бы без этой инъекции данных. Удаленная команда может и не удосужились ничего прочитать из его stdin -- это зависит от конкретной команды выполняются.
После запуска команды заранее не известен, и не известно заранее, если он должен читать что-нибудь из stdin, я не хочу на стороне клиента, чтобы потреблять всю его stdin перед вызовом удаленной команды.
Здесь еще больше подробностей о том, что я пытаюсь сделать:
Я хочу написать wrapper1 вокруг "узла SSH wrapper2 УМК", где cmd-это заранее неизвестно (предполагаю, что это не требует телетайп, но он может или не может читать стандартный ввод). Wrapper1 вышлем некоторые дополнительные данные на удаленной стороне для чтения wrapper2 до wrapper2 руководителей УМК. Я хочу, чтобы wrapper1 быть более или менее прозрачным; он должен работать просто как SSH работает, кроме отправки данных, и работает wrapper2 как удаленную команду, чтобы прочитать дополнительные данные, прежде чем выполняющейся УМК. Если удаленный УМК читает стандартный ввод, я хочу, чтобы это сделать со стандартного ввода wrapper1, так же, как если "хост SSH ЦМД" были выполнены.
Я закодировал этот имея wrapper1 создать дочерний процесс, который записывает дополнительные данные в stdout, затем выполняющейся кошка скопировать stdin в stdout. Wrapper1 трубы вывода дочернего процесса в поток ввода команды ssh. Однако, этот подход терпит неудачу, когда по SSH запрашивает пароль, так как кошка и СШ борются за ввод с клавиатуры (когда команда cmd выполняется в интерактивном режиме). Если я вставляю спать до ребенка кошка, он будет работать, но очевидно, что не является оптимальным.
Потому что я не знаю, если cmd читает стандартный ввод на всех, я не могу потреблять все из стандартного ввода до выполняющейся СШ для того, чтобы избежать конфликта. В любом случае, он является субоптимальным, чтобы прочитать все из стандартного ввода во многих сценариях (например, когда очень большие, или его нужно употреблять по нарастающей).
Есть ли способ сделать то, что я хочу? Сейчас все, что я могу думать, это возможность wrapper1, который дает выбор:
- Потреблять весь свой stdin и отправить его на удаленной стороне, или
- Перенаправления stdin из /dev/нуль.
Но, было бы лучше, чтобы позволить пользователю выбрать один из двух вариантов и разрешить данные из stdin читать постепенно, как это обычно было бы без фантиков.