bashスクリプトでrootとしてSTDINを使用してコマンドを実行します(ただし、rootパスワードを手動で挿入する必要はありません)。

bashスクリプトでrootとしてSTDINを使用してコマンドを実行します(ただし、rootパスワードを手動で挿入する必要はありません)。

Bashスクリプトからrootとしてコマンドを実行したいと思います。

このコマンドはSTDINから読み取ることができる必要があります。

Bashスクリプトにはローカル変数としてrootパスワードがあり、手動で入力したくありません。

私が試したとき:

  1. 初期スクリプトをrootとして実行する方法を知っていますが(実際には使用しますが、より良い方法を探しています)、複雑なロジック、さまざまなユーザー、および環境変数には制限があります。

  2. sudo-NOPASSWDメソッドを知っていますが、セキュリティ上の理由で使用したくありません。

  3. 方法はわかっていますが、su -c毎回ルートパスワードを入力する必要があります。

su - -c "adduser new_user"
  1. 私は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オプションのみを使用すれば十分です。

おすすめ記事