ビルド スクリプトを書いています。このスクリプトは最後にファイルをコピーする必要があります。このファイルは別のユーザーのホーム ディレクトリに配置され、このファイルがこの 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