Ich schreibe ein Build-Skript. Dieses Skript muss am Ende eine Datei kopieren. Diese Datei wird im Home-Verzeichnis eines anderen Benutzers abgelegt und es ist auch notwendig, dass die Datei diesem zweiten Benutzer gehört. Mein erster Versuch war, su wie folgt zu verwenden:
su fbgs -c "cp fbgs.jar /home/fbgs/server/plugins/"
Dies funktioniert in der Befehlszeile, aber wenn ich dies in das Skript eingebe, muss das Kennwort automatisch eingegeben werden. Daher habe ich den folgenden Befehl ausprobiert:
echo Password | su -S fbgs -c "cp fbgs.jar /home/fbgs/server/plugins/"
Aber dann bekomme ich diese Ausgabe:
su: must be run from a terminal
Wie bekomme ich das zum Laufen?
Antwort1
Erwägen Sie, für diesen speziellen Prozess sudo einzurichten und vielleicht den spezifischen Befehl NOPASSWD: festzulegen, damit Sie kein Klartextkennwort ausgeben müssen (was in jedem Fall sehr schlecht wäre). Außerdem gibt es sudo-Flags, mit denen Sie ein TTY entweder erforderlich machen oder nicht.
Beispiel.
/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