Я должен сделать следующие шаги на нескольких серверах:
- войти с моим именем пользователя
- введите
sudo su -
- введите
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
Оба не работают, хотя.
Ответы:
Лучшее решение - настроить sudo так, чтобы ваш пользователь мог запускаться
/full/path/to/amCLI
без предоставления пароля.Тогда вы можете просто
источник
Может быть, если вы поставите vneudeck @ $ hostname в двойные кавычки, это поможет. И между су и нет места - надеюсь, это полезно
источник
Первый не сработает:
Это будет выполнено
sudo su -
, и когда это вернется (т.е. когда вы закончили обрабатывать команды как root и вышли), он выполнит amCLI. (Обратите внимание, что альтернативойsudo su
являетсяsudo -s
, хотяsudo su -
я думаю , что больше.)Вторая версия может работать с некоторыми условиями:
sudo
не должен запрашивать пароль иamCLI
должен быть в PATH (не путь root, который, вероятно, задается при вводеsudo su -
, но ваш путь, потому что sudo использует ваш путь). Попробуйте указать полный путьamCLI
, например,/usr/local/sbin/amCLI
или что-то еще.источник
sudo
сценариев. В противном случае любой, кто может поместить файл с именемamCli
где-либо в ПУТЬ пользователяvneudeck
(что может быть сравнительно легко), имеет доступ к корневым привилегиям.