Я хочу смочь широковещательно передать те же команды к нескольким серверам в интерактивном режиме, подразумевая, что я хочу отправить команду, просмотреть результат и отправить другую команду. Команды произвольны и не могут быть заданы сценарием.
Вопрос, Как я могу автоматизировать рабочие команды удаленно по SSH? решает эту проблему очень хорошо, если Вы подвержены использованию инструментов, предложенных как: pssh, sdh, gsh, кластер-ssh.
Но я пытаюсь узнать если там больше низкоуровневого решения, только при помощи стандартного SSH.
Моим вопросом является банка, Вы думаете о пути в Bash для открытия нескольких SSHs, перенаправления в них файл, поэтому каждый раз я пишу в файл, новый текст перенаправляется в SSH и выполняется.
Если существует обоснование позади, почему вышеупомянутое не может быть сделано, я был бы рад изучить, почему это не возможно.
Один путь состоит в том, чтобы использовать, совместно обрабатывает.
$ coproc foo { ssh -T foo.domain; }
Теперь $foo
массив двух дескрипторов файлов; ${foo[0]}
stdout ssh и пишущий в fd ${foo[1]}
отправит к stdin ssh.
$ echo "whoami" >&${foo[1]}
$ head -n 1 <&${foo[0]}
grawity
$
(Доступ /proc/$$/fd/${foo[1]}
работал бы также.)
Иначе - именованные каналы.
$ mkfifo {foo,bar}.{in,out}
$ ssh foo <foo.in >foo.out &
$ ssh bar <bar.in >bar.out &
$ echo "whoami" | tee foo.in bar.in
Подобный - обрабатывают замену.
$ echo "whoami" | tee >(ssh foo) >(ssh bar)
Больше чем для одной команды:
$ mkfifo in
$ tee >(ssh foo) >(ssh bar) <in &
$ echo "whoami" >in
Но так как каналы повреждаются легко, Вам, возможно, придется обратиться к регулярным файлам.
(Этот пример вставит файл /dev/shm
постараться не поражать диск каждый раз.)
$ f=/dev/shm/in; touch $f
$ tail -f $f | ssh foo &
$ tail -f $f | ssh bar &
$ echo foo > $f
$ echo bar >> $f; # note: >> for appending
И:
$ f=/dev/shm/in; touch $f
$ tail -f $f | tee >(ssh foo) >(ssh bar) &
$ echo foo >> $f