Запустите локальные скрипты на нескольких серверах с помощью sudo пользователя через сценарий

Быстрые шаги и результаты (полученный в итоге от страницы ATA Secure Erase) следуют: Если вывод не то, что ожидается, посмотрите полную страницу. Замена /dev/X с Вашим устройством.

  1. hdparm -I /dev/X должен включать "не замороженный" - если заморожено (см. примечания ниже по тому, что пошло не так, как надо для меня):
    • Приостановите компьютер, полная остальная часть этих шагов затем выключаются (см. примечания),
    • или попробуйте printf mem > /sys/power/state (из комментариев; не работал на меня - отклоненное разрешение),
  2. hdparm --user-master u --security-set-pass password /dev/X
  3. hdparm -I /dev/X должен включать "включил"
  4. hdparm --user-master u --security-erase password /dev/X
  5. hdparm -I /dev/X должен включать "не включенный"

От результатов страницы кажется, что эти шаги должны смочь быть сделанными через несколько минут на Intel X25-M 80GB SSD. Исправление: На моем Intel X25-M во мне выполнили чуть более чем минута: шаг 2 мгновенен.

Примечания по размораживанию через приостанавливают: Приостановка моего компьютера для размораживания диска работала на меня. Я:

  1. установленная Ubuntu
  2. загруженный это
  3. добавленные графические драйверы
  4. Перезагруженный - но заморозилось на завершении работы
  5. Питание сброса, и найденный незагрузочной системой.

Перезапуск установки показал, что не было никаких разделов на моем диске. Кажется, что обход безопасности BIOS оставил мои разделы в память о некотором виде.

2
09.01.2013, 22:49
4 ответа

Одна идея, хотя это не могло бы быть лучшим там, состоит в том, чтобы Вы настроили ssh для использования основанной на ключе аутентификации вместо аутентификации по паролю. Это инструкции должны быть достаточными в случае, если Вы не знаете о нем Ключевая Аутентификация SSH

Я не знаю то, что Ваш сценарий тестирования содержит, ни сложность его. давайте предположим, что это - справедливый сложный сценарий, и это сохраняет вывод под/tmp/script_output/, и в этом случае я предлагаю следующее:

while read -r i
do
   scp $2 admin@remote_server:/tmp/
   ssh -t admin@remote_server /tmp/$2
   ssh admin@remote_server rm /tmp/$2
   scp -r admin@remote_server:/tmp/script_output/ /tmp/
   ssh admin@remote_server rm -rf /tmp/script_output
done < "$1"

Между прочим, от sudoers

#
# Disable "ssh hostname sudo <cmd>", because it will show the password in clear.
#         You have to run "ssh -t hostname sudo <cmd>".
#
Defaults    requiretty
3
27.01.2020, 21:57
  • 1
    я серьезно сомневаюсь, что любой хочет rm -rf /tmp. –  jordanm 08.01.2013, 21:55
  • 2
    Это плохо, это должно установить сессию SSH пять раз, которая занимает некоторое время для 100 серверов. Необходимо объединить команды как ssh admin@server 'cat > file && chmod +x file && ./file;rm -f file' < script >output или что-то как этот (для объединения в цепочку). Кроме того, этот ответ не отвечает на вопрос с sudo. –  Lekensteyn 08.01.2013, 22:32
  • 3
    Привет все, я использую основанную на ключе аутентификацию для всех логинов. Но я все еще должен знать, как использовать sudo в этой команде ssh. Я использую ssh-tt admin@server, он делает то, что он должен сделать, но выкладывает ошибку "tcgetattr: Несоответствующий ioctl для устройства". В течение времени, будучи, я перенаправляю ошибку в ошибочный файл журнала. Кроме того, Lekensteyn, сделайте Вы думаете, что следующая команда будет полезна вместо какой предложенный alexandre. ssh admin@server 'кошка> файл && chmod +x файл &&./файл; комната-f файл' <testscript> вывод –  Shashi 08.01.2013, 22:56
  • 4
    При Ответе на все Исправленные комната-rf/tmp, поскольку я, что я хотел, был ясен вывод сценария. Добавьте-t к ssh согласно sudoers спецификации. sudo требует tty. –  BitsOfNix 09.01.2013, 10:12

У меня была та же проблема некоторое время назад. Это - мое решение:
https://github.com/maciejkorzen/misc-ruby/blob/master/ssh-batch-upload-sftp-and-run.rb

  • Загрузите этот сценарий.
  • Создайте файл CSV с названиями серверов и паролей (я предполагаю, что вход в систему является тем же на каждом сервере).
  • Создайте сценарий, который Вы хотите выполнить.
  • Скорректируйте переменные в моем сценарии Ruby, выполните его и позвольте ему сделать всю работу для Вас.:-)
1
27.01.2020, 21:57

Странный способ сделать это.

Я делаю некоторые вещи при многом использовании серверов clusterssh (введите однажды, сделайте это на каждом сервере).

Для больших изменений мы используем наши собственные репозитории, которые активируются на каждом сервере. Тем путем мы используем механизм патча операционной системы для распределения определенных изменений в большом количестве серверов.

0
27.01.2020, 21:57

Следующий способ позволит вам выполнять команды sudo на нескольких хостах, вводя пароль sudo только один раз в начале.

Чего не хватает, так это цикла for или чего-то, что устанавливает переменную HOSTS на хосты, которые у вас есть. Сценарий создает файл в папке temp, который содержит sudo пароль, но этот файл сразу же удаляется. Это позволяет команде использовать пароль sudo без его отображения в окне терминала или в вашем сценарии.

#!/bin/bash

if "something" 
 then

 else

cat > /tmp/$HOSTS-pw.sh <<EOS
#!/bin/sh
ssh user@$HOSTS sudo "your command here" <<EOC
$SUDOPW
EOC
EOS

fi

chmod 700 /tmp/$HOSTS-pw.sh
/tmp/$HOSTS-pw.sh >/dev/null
if [ -f /tmp/$HOSTS-pw.sh ]; then rm -f /tmp/$HOSTS-pw.sh; fi

echo "Enter SUDO password:"
read -s SUDOPW

for loop here!

unset SUDOPW
exit 0
1
27.01.2020, 21:57

Теги

Похожие вопросы