Bashスクリプトからrootとしてコマンドを実行したいと思います。
このコマンドはSTDINから読み取ることができる必要があります。
Bashスクリプトにはローカル変数としてrootパスワードがあり、手動で入力したくありません。
私が試したとき:
初期スクリプトをrootとして実行する方法を知っていますが(実際には使用しますが、より良い方法を探しています)、複雑なロジック、さまざまなユーザー、および環境変数には制限があります。
sudo-NOPASSWDメソッドを知っていますが、セキュリティ上の理由で使用したくありません。
方法はわかっていますが、
su -c
毎回ルートパスワードを入力する必要があります。
su - -c "adduser new_user"
- 私はheredocメソッドについて知っていますが、私のSTDINをブロックします。
read -sp "Please, enter root password: " ROOT_PASSWD
echo
su - <<EOI
$ROOT_PASSWD
echo "<This password input is handled automatically based on previously asked password>"
# Do NOT asks user password and data as supposed to:
adduser new_user
EOI
ベストアンサー1
あなたはこれを行うことができます、
echo $PASSWORD | su -c "tac <<_EOF
1
2
3
_EOF"
しかし、他の人が答えたように、これは安全ではないか、推奨されません。あなたのアプローチがうまくいかないのは、suが実行するコマンドにstdinを渡そうとしたときにsuがスクリプト全体を上書きするためです。また、ほとんどのadduserコマンドを使用すると、標準入力ではなくコマンドラインでパスワードを指定できるため、そうする必要があるかどうかわかりません。 suの-cオプションのみを使用すれば十分です。