Мне необходимо выполнить следующие действия на нескольких серверах:
- войти под моим именем пользователя
- введите
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
Но оба варианта не работают.
решение1
Лучшим решением будет настроить 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
решение2
Может быть, если вы поместите vneudeck@$hostname в двойные кавычки, это поможет. И нет пробела между su и - Я надеюсь, это полезно
решение3
Первый вариант не сработает:
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
или как там это.