Автор Тема: Как одновременно выполнить команду на нескольких копьютерах? [решено]  (Прочитано 5475 раз)

Оффлайн rotkart

  • Участник
  • *
  • Сообщений: 661
Доброго дня!
У меня есть класс из 12-ти компьютеров, на них установлен Школьный Мастер 5.0.1.
Периодически мне необходимо выполнять на них одинаковые команды, например выключение.
Сейчас я делаю так:
$ for i in 101 102 103 104 105 106 107 108 109 110 111 112; do ssh 192.168.101.$i sudo shutdown -h now; doneно это получается не одновременно на всех машинах, а по очереди.

Есть способ именно одновременного выполнения команд?
« Последнее редактирование: 25.09.2010 19:11:06 от Skull »
Научить нельзя, научиться можно.

Оффлайн bormant

  • Участник
  • *
  • Сообщений: 358
А так?
$ for i in 101 102 103 104 105 106 107 108 109 110 111 112; do ssh 192.168.101.$i sudo shutdown -h now & ; done

Оффлайн rotkart

  • Участник
  • *
  • Сообщений: 661
[teacher@teacher ~]$ for i in 103 104 105 106 107 108 109 110 111 112; do ssh 192.168.101.$i sudo shutdown -r now &; done
bash: syntax error near unexpected token `;'
Научить нельзя, научиться можно.

Оффлайн Skull

  • Глобальный модератор
  • *****
  • Сообщений: 20 162
    • Домашняя страница
$ for i in 101 102 103 104 105 106 107 108 109 110 111 112; do ssh 192.168.101.$i sudo shutdown -h now; doneЕсть способ именно одновременного выполнения команд?
Зачем указывать все? Можно просто перечислить:
for i in $(seq 101 112);do nohup ssh "root@192.168.101.$i" /sbin/shutdown -h now;done
Обратите внимание на
1. Доступ (нужно предварительно выложить ключ для доступа root на все компьютеры);
2. nohup позволяет отделить процесс
Андрей Черепанов (cas@)

Оффлайн bormant

  • Участник
  • *
  • Сообщений: 358
[teacher@teacher ~]$ for i in 103 104 105 106 107 108 109 110 111 112; do ssh 192.168.101.$i sudo shutdown -r now &; done
bash: syntax error near unexpected token `;'
Хм, не соображу что-то, как на одной строчке записать. Но на двух-то точно работает ;-)
for i in 103 104 105 106 107 108 109 110 111 112; do ssh 192.168.101.$i sudo shutdown -r now &
done

Пожалуй, возможно и так:
for i in 103 104 105 106 107 108 109 110 111 112; do ssh -f 192.168.101.$i sudo shutdown -r now ; done
Skull,
что-то не соображу, а для чего в этой задаче может быть полезен nohup (отделение от активной консоли)?
« Последнее редактирование: 23.09.2010 16:43:08 от bormant »

Оффлайн rotkart

  • Участник
  • *
  • Сообщений: 661
Зачем указывать все? Можно просто перечислить:
for i in $(seq 101 112);do nohup ssh "root@192.168.101.$i" /sbin/shutdown -h now;done
Обратите внимание на
1. Доступ (нужно предварительно выложить ключ для доступа root на все компьютеры);
2. nohup позволяет отделить процесс


Ну я еще не волшебник :-)
Ключ через ssh-copy-id я положил, правда не для root, для teacher.
Для рута ведь надо sshd.conf на каждой машине править, разрешая ему входить по ssh, это многие советы по безопасности не рекомендуют, да и 12 правок смущают.
А для teacher я прописал NOPASSWD в sudoers.
Это правильно? Или лучше руту ssh открыть?

За nohup спасибо, я как раз сейчас читал про bg и nohup :-)
Научить нельзя, научиться можно.

Оффлайн Skull

  • Глобальный модератор
  • *****
  • Сообщений: 20 162
    • Домашняя страница
Для рута ведь надо sshd.conf на каждой машине править, разрешая ему входить по ssh, это многие советы по безопасности не рекомендуют, да и 12 правок смущают.
Глупости! Доступ для root разрешён по умолчанию, но не по паролю, а по ключу. Ключ нужно только вписать в файл.
Цитировать
А для teacher я прописал NOPASSWD в sudoers.
А вот это уже дырища.
Андрей Черепанов (cas@)

Оффлайн bormant

  • Участник
  • *
  • Сообщений: 358
Кстати, если интерпретатор bash, можно перечислить и его средствами, без вызова внешнего seq:

for i in {101..112}; do ...

Оффлайн Skull

  • Глобальный модератор
  • *****
  • Сообщений: 20 162
    • Домашняя страница
Кстати, если интерпретатор bash, можно перечислить и его средствами, без вызова внешнего seq:

for i in {101..112}; do ...
Джедаи против башизмов! :)
Андрей Черепанов (cas@)

Оффлайн rotkart

  • Участник
  • *
  • Сообщений: 661
Глупости! Доступ для root разрешён по умолчанию, но не по паролю, а по ключу. Ключ нужно только вписать в файл.
А для ssh-copy-id он рута разве пустит? Придется на каждую машину физически подходить, чтобы с флешки или по scp ключ для рута положить?
Попробую в понедельник.
Цитировать
А вот это уже дырища.
то есть sudo - это плохо? И для каждого административного действия надо делать su - -c ... ? И для этого тому, кому я разрешил исполнить команду от рута, надо будет раскрыть пароль?
Если я уберу NOPASSWD на ALL и сделаю алиас только на те команды, что мне часто нужны, будет безопаснее?
Пожалуй, возможно и так:
for i in 103 104 105 106 107 108 109 110 111 112; do ssh -f 192.168.101.$i sudo shutdown -r now ; done
Спасибо, попробую -n и -f. В мане написано, что это для X программ, в основном, правда.
Научить нельзя, научиться можно.

Оффлайн rotkart

  • Участник
  • *
  • Сообщений: 661
Да, совсем забыл спросить еще одну вещь!
При выполнении команд через ssh на машинах со свежеустановленным Школьным Мастером 5.0.1 начал появляться запрос парольной фразы ключа, хотя при генерации ключа я ее не вводил.
То есть выскакивает графическое окно с предложением ввести фразу и кнопкой ОК. И соотвественно висит, пока не нажмешь :-(
На других машинах с Легким такого нет.
Где смотреть, подскажите?
Научить нельзя, научиться можно.

Оффлайн Skull

  • Глобальный модератор
  • *****
  • Сообщений: 20 162
    • Домашняя страница
А для ssh-copy-id он рута разве пустит? Придется на каждую машину физически подходить, чтобы с флешки или по scp ключ для рута положить?
Если поднят веб-интерфейс Alterator или есть ssh-доступ на пользователя в группе wheel, то ходить ногами не надо.
Цитировать
то есть sudo - это плохо? И для каждого административного действия надо делать su - -c ... ? И для этого тому, кому я разрешил исполнить команду от рута, надо будет раскрыть пароль?
sudo плох тем, что а) достаточно пароля пользователя; б) можно запустить программу локально. С ключом всегда более безопасно. И удобнее намного.
Цитировать
Если я уберу NOPASSWD на ALL и сделаю алиас только на те команды, что мне часто нужны, будет безопаснее?
Будет чуть более безопасно.
Андрей Черепанов (cas@)

Оффлайн Skull

  • Глобальный модератор
  • *****
  • Сообщений: 20 162
    • Домашняя страница
При выполнении команд через ssh на машинах со свежеустановленным Школьным Мастером 5.0.1 начал появляться запрос парольной фразы ключа, хотя при генерации ключа я ее не вводил.
KDE4, он такой... Без понятия что они там наделали. Обычно использую ssh-add и ввожу пароль один раз в консоли (без разницы в какой среде).
Андрей Черепанов (cas@)

Оффлайн rotkart

  • Участник
  • *
  • Сообщений: 661
KDE4, он такой... Без понятия что они там наделали. Обычно использую ssh-add и ввожу пароль один раз в консоли (без разницы в какой среде).
Понял. Значит я могу в строку добавить до моего цикла вызов ssh-add, и кучи запросов паролей не будет?
Эх, жду понедельника :-)
Научить нельзя, научиться можно.

Оффлайн rotkart

  • Участник
  • *
  • Сообщений: 661
Зашел в школу, типа мимо проходил :-)
Чтобы выполнить все рекомендации Skull, выполнил сначала так:
#!/bin/bash
for i in $(seq 101 112)
do
ssh-add
ssh 192.168.101.$i sudo mkdir /root/.ssh
ssh 192.168.101.$i sudo cp /home/teacher/.ssh/authorized_keys2 /root/.ssh/
ssh 192.168.101.$i sudo chmod 600 /root/.ssh/authorized_keys2
ssh 192.168.101.$i sudo chown root:root /root/.ssh/authorized_keys2
scp /home/teacher/dellast.sed 192.168.101.$i:/home/teacher
ssh 192.168.101.$i sudo sed -f /home/teacher/dellast.sed -i /etc/sudoers
done
В dellast.sed всего одна инструкция: $d, так как в sudoers я писал строку с NOPASSWD последней.
После последовательного выполнения команд искомое заработало:
ssh-add; for i in $(seq 101 112); do nohup ssh root@192.168.101.$i shutdown -r now; done
Огромное спаcибо за подсказки!
Научить нельзя, научиться можно.