1

Я должен сделать следующие шаги на нескольких серверах:

  1. войти с моим именем пользователя
  2. введите sudo su -
  3. введите amCLI -l 32/1 | grep Firmware

Поэтому я хотел бы написать все это в одном сценарии, моя идея была:

#!bin/bash
for hostname in DPM-BZ0201 DPM-BZ0202
do
ssh -n vneudeck@$hostname "sudo su-; amCLI -l 32/1 | grep Firmware"
done

или же

#!bin/bash
for hostname in DPM-BZ0201 DPM-BZ0202
do
ssh -n vneudeck@$hostname "sudo amCLI -l 32/1 | grep Firmware"
done

Оба не работают, хотя.

3 ответа3

2

Лучшее решение - настроить sudo так, чтобы ваш пользователь мог выполнять /full/path/to/amCLI без предоставления пароля.

Тогда вы можете просто

#!bin/bash
for hostname in DPM-BZ0201 DPM-BZ0202
do
    ssh -n vneudeck@$hostname sudo /full/path/to/amCLI -l 32/1 | grep Firmware
done
0

Может быть, если вы поставите vneudeck @ $ hostname в двойные кавычки, это поможет. И между су и нет места - надеюсь, это полезно

0

Первый не сработает:

sudo su -; amCLI -l 32/1 | grep Firmware

Это выполнит sudo su - , и когда он вернется (т.е. когда вы закончили обработку команд как root и завершили работу), он выполнит amCLI. (Также обратите внимание, что альтернативой sudo su является sudo -s , хотя sudo su - больше, я думаю.)

Вторая версия может работать с некоторыми условиями: sudo не должен запрашивать пароль, а amCLI должен быть в PATH (не путь root, который, вероятно, задается при sudo su - , а ваш путь, потому что sudo использует ваш путь), Попробуйте указать полный путь к amCLI , например /usr/local/sbin/amCLI или что-то еще.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .