Das Kennwort kann in einem Skript nicht an su übergeben werden.

Das Kennwort kann in einem Skript nicht an su übergeben werden.

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

verwandte Informationen