Я пишу скрипт сборки. Этот скрипт должен скопировать файл в конце. Этот файл будет помещен в домашний каталог другого пользователя, и также необходимо, чтобы файл принадлежал этому второму пользователю. Моя первая попытка была использовать 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