Мне нужно пройти через ssh на несколько хостов и запустить серию команд на каждом.
что-то вроде:
for i in $(jot -w '%02.0f' 14 1)
>do ssh user@host$i sudo -i "command1; command2; command3"
>done
но я не могу заставить его работать правильно. Я видел в Google разные вещи, например sudo sh -c
, конвейер к sudo и т. д., но не могу понять.
;
jot -w
, что примерно эквивалентно seq -f
в Linuxзаранее спасибо!
Пытаться передать строки команд в кавычках по ssh всегда сложно. Вы не упоминаете, какие сообщения об ошибках вы получаете, но вот несколько мыслей:
Конфигурация sudo по умолчанию во многих системах требует, чтобы с вашим сеансом был связан действительный TTY. Для этого требуется либо (а) вызвать ssh с параметром «-t», либо (б) удалить параметр «requiretty» из конфигурации sudo.
Это работает для меня (пункт назначения - набор систем RHEL5):
for i in 0 1; do
ssh -t host$i sudo -i "echo one; echo two; echo 'three four'"
done
Это приводит к:
one
two
three four
Connection to host0 closed.
one
two
three four
Connection to host1 closed.
Есть множество инструментов, которые сделают вашу жизнь проще, если вы будете часто делать это:
И так далее. Обычно я сам использую сценарии оболочки.
Я считаю, что правильное цитирование довольно раздражает. Вместо этого я предпочитаю просто передавать команды на удаленный хост через канал. Таким образом, вам не нужно беспокоиться об экранировании прямо в командной строке ssh. Просто передайте в канал именно то, что вы бы набрали, если бы вы были подключены в интерактивном режиме.
CMDS="sudo bash -c '/usr/bin/id; /usr/bin/id; '/usr/bin/id"
for i in 0 1; do
echo $CMDS | ssh -t host$i bash
done
Что возвращается
uid=0(root) gid=0(root) groups=0(root)
uid=0(root) gid=0(root) groups=0(root)
uid=0(root) gid=0(root) groups=0(root)
думаю пшш это то, с чем вам нужно работать.
http://sourceforge.net/projects/clusterssh/
Это явный победитель: D
Взгляните на BatchLogin:
http://batchlogin.sourceforge.net/
BatchLogin - это инструмент с лицензией на бесплатное программное обеспечение (GPL), который позволяет управлять подключениями к серверам в последовательном формате в различных средах. У него есть свои ограничения, но по большей части любой сценарий или файл данных может быть автоматически передан и выполнен в среде с несколькими серверами, независимо от сложности «зоны» (т.е. iDMZ, DMZ и т. Д.). Он делает это таким образом, что сценариями оболочки и доступом к серверам можно легко управлять на основе «каждого администратора».