Я не смог найти вопрос, который описывает этот конкретный сценарий.
Я пытаюсь выполнить очень простой bash-скрипт для получения журналов с нескольких машин. Я запускаю скрипт локально, но мне нужен доступ к внешней машине через ssh, а также sudo для привилегированного пользователя на этой машине ...
ssh myuser@machine.net
sudo su - privledged_user
cat logs > file.txt
Запуск этого с sh -x показывает, что bash застревает в строке 'ssh'. Поэтому я попытался пересмотреть это к этому:
ssh myuser@machine.net sudo su - privledged_user cat logs > file.txt
Это также, кажется, останавливается на неопределенный срок. Есть ли лучшее решение этой проблемы? Я не вижу способа использовать sudo su из того, что я могу сказать ...
Спасибо за любую помощь!
Ответы:
Чтобы добиться этого в моей текущей среде, нужно запустить ssh с
-t
флагом, который вызывает распределение tty, а затем запустить внутри него sudo -u root следующим образом:У меня есть учетная запись в sudoers на удаленной стороне, поэтому пароль не требуется.
В этом примере показаны различные способы сделать это в одном сеансе ssh, включая запуск нескольких команд с помощью bash или в подоболочке. Также обратите внимание, что если вы поместите приведенный выше код в исполняемый скрипт, вы можете передать аргументы командной строки ($ 1 и $ 2) в ssh, и они будут расширены, а затем будут ссылаться на удаленную сторону.
источник
Если вы не хотите или не можете остановить sudo от запроса пароля, один простой прием - прочитать его локально и сохранить в локальной переменной:
источник
Если sudo сконфигурировано так, чтобы разрешать команды без пароля, это должно делать то, что вы хотите:
или
в зависимости от того, хотите ли вы
file.txt
создать файл локально или удаленно.В противном случае, вот способ передать пароль удаленного пользователя
sudo
:источник