2017-03-06 14 views
0

私はスクリプトでviコマンドを使用しようとします。さらに、同じスクリプトでsudoのパスワードを渡そうとします。だから私は次のようなものを持っています:パイプからsudoのパスワードを読み取る

echo mypassword | bash -c "echo $'Goappendthis\E:x\n' | sudo vi /etc/test" 

viコマンドは成功しましたが、まだパスワードを尋ねています。私はどのようにパスワードを使ってそれを行うことができるので、スクリプト内の複数のホストに対して同じコマンドを実行できますか?

+1

ところで、ex' 'としてそれを呼び出すことは非対話型使用するために設計されたモードに' vi'を置く、または 'viの-s scriptfile'を使用すると、VIがから実行するコマンドを読み込みます'scriptfile'です。 –

+0

ご意見ありがとうございます。奇妙なことに、会社の賢明な方針では、sed、awk、python、またはperlの1つのライナーでルート所有ファイルを変更することはできません。それはちょうどsudo viを使ってファイルを変更することができるように見え、私は何百ものホストを変更する必要があるので、私はこれを自動化する方法を見つける必要があります。 基本的には、同じファイルをsudoを実行してファイルの最後に行を追加して保存する必要があります。どうすればそれをやることができますか? – JavaRed

+1

ポリシーの手紙を遵守していても、あなたは確かにその精神に順応していません。いずれにしても、典型的なRight Thingは、人形、シェフ、SaltStack、CFEngineなどのオーケストレーションシステムが提供する機能を使用することです。ファイルの生成をテンプレート化するために使用します。 –

答えて

0

最初に:これを行わないでください。パスワードの引き渡しを必要としない権限昇格のメカニズムを使用してください。

秒:-Sまたは--stdinが指定されていない場合、sudoは、stdinからではなくTTYから直接パスワードを読み取ります。第三に

:あなたはS STDINさんはもviを上書きせずにを標準入力 "sudoにパスワードを指示する必要があります。それを実行すると、以下のようになります。

echo mypassword | sudo --stdin -- bash -c "echo $'Goappendthis\E:x\n' | vi /etc/test" 
+0

これは理想的な解決策ではありませんが、現時点では回避策として使用できます。どうもありがとう。 – JavaRed

関連する問題