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

ssh на несколько хостов и несколько команд sudo

Мне нужно пройти через 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 и т. д., но не могу понять.

заранее спасибо!

Пытаться передать строки команд в кавычках по 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 и т. Д.). Он делает это таким образом, что сценариями оболочки и доступом к серверам можно легко управлять на основе «каждого администратора».