Невозможно передать пароль su в скрипте

Невозможно передать пароль su в скрипте

Я пишу скрипт сборки. Этот скрипт должен скопировать файл в конце. Этот файл будет помещен в домашний каталог другого пользователя, и также необходимо, чтобы файл принадлежал этому второму пользователю. Моя первая попытка была использовать su следующим образом:

su fbgs -c "cp fbgs.jar /home/fbgs/server/plugins/"

Это работает в командной строке, но когда я помещаю это в скрипт, мне нужно, чтобы пароль вводился автоматически. Поэтому я попробовал следующую команду:

echo Password | su -S fbgs -c "cp fbgs.jar /home/fbgs/server/plugins/"

Но затем я получаю такой вывод:

su: must be run from a terminal

Как мне это сделать?

решение1

Рассмотрите возможность настройки sudo для этого конкретного процесса и, возможно, установите специальную команду NOPASSWD:, чтобы вам не пришлось выводить пароль открытым текстом (что в любом случае очень плохо). Кроме того, существуют флаги sudo, которые позволяют вам требовать или не требовать TTY.

Пример.

/etc/sudoers.d/mycmd:

theuser ALL=(fgbs) NOPASSWD: cp fbgs.jar /home/fbgs/server/plugins

my-build-script.sh:

#!/bin/sh
/usr/bin/sudo -H -u fbgs cp fbgs.jar /home/fbgs/server/plugins

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