Используйте команду sudo для скрипта SSH-сервера

Используйте команду sudo для скрипта SSH-сервера

Мне необходимо выполнить следующие действия на нескольких серверах:

  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

Но оба варианта не работают.

решение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или как там это.

Связанный контент