スクリプトでsuにパスワードを渡すことができません

スクリプトでsuにパスワードを渡すことができません

ビルド スクリプトを書いています。このスクリプトは最後にファイルをコピーする必要があります。このファイルは別のユーザーのホーム ディレクトリに配置され、このファイルがこの 2 番目のユーザーに属していることも必要です。最初の試みは、次のように 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: を設定することを検討してください。そうすれば、平文のパスワードをエコーする必要がなくなります (いずれにしても、これは非常に不都合です)。また、TTY を必須にするか必須にしないかを選択できる sudo フラグもあります。

例。

/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

関連情報