起動スクリプトでパスワードでコマンドを送信する

起動スクリプトでパスワードでコマンドを送信する

セントOS 6.5

サーバーは特にAWS AMIです。これ

upstartを使用して起動時にプロセスを開始しようとしています。

この特定のボックスでは、rootログインが無効になり、sudo何かを実行する必要があるたびにパスワードの入力を求められます。

したがって、単にコマンドをスクリプトに入れるだけでは機能しません。

追いかけようとするこの回答、成功できませんでした

/ect/init ディレクトリに次の rio.conf ファイルがあります。

start on runlevel [2345]
stop on runlevel [!2345]

exec echo Password! | sudo -s /usr/bin/riofs --fuse-options="allow_other" --fmode=0777 --dmode=0777 xx.xxxxxx /mnt/applications/recorder/streams/_definst_/s3

これを実行するたびに何も起こらないようです。

Password!これは単なるサンプルパスワードです。

編集する:

入力すると、exec /usr/bin/riofsSSHウィンドウが閉じて戻ってくると機能することがわかります。これが何を意味するのか、どのように自動化するのかは全くわかりません。

答え1

sudoinit / upstartスクリプトにある必要はありません。デフォルトでは、すべてのinit / upstartサービスはrootとして実行されます。

このように考えてみてください。どのユーザーで起動スクリプトを実行しますか?個人ユーザーとして実行したい場合はなぜですか?システムはスクリプトだけを見ることができ、個々のユーザーが誰であるかはまったくわかりません。

つまり、exec行を次のように変更します。

exec /usr/bin/riofs --fuse-options="allow_other" --fmode=0777 --dmode=0777 xx.xxxxxx /mnt/applications/recorder/streams/_definst_/s3

結局私はそれをしません。ファイルシステムをマウントしています/etc/fstab。次の作業が必要です。

riofs#xx.xxxxxx    /mnt/applications/recorder/streams/_definst_/s3    _netdev,allow_other,fmode=0777,dmode=0777   0 0

答え2

ユーザーパスワードなしで機能するようにsudoを設定できます。 visudoをrootとして実行し、ユーザー行にNOPASSWDを追加します。

user    ALL=(root)    NOPASSWD: ALL

編集する

これが新スクリプトであることを考えると、Patrickの答えは正しいです。

また、任意のスクリプトの場合、0xC0000022Lが適しています。パスワードを必要としないユーザーでこのルート専用スクリプトを実行するとします。

user@host:~$ ls -lah /usr/local/bin/script.sh
-rwx------  1 root root ... script.sh

visudoを使用すると、ユーザー行は次のようになります。

user    ALL=(root)    NOPASSWD: /usr/local/bin/script.sh

これにより、このコマンドのみがパスワード要件を免除されます。

答え3

考慮すべき2つのことがあります。

まず、毎回パスワードを入力するのがsudo面倒な場合は、@mirimirが提案したように "/ etc / sudoers"ファイルを次のように編集してください。

yourusername ALL=(root) NOPASSWD: ALL

または

yourusername ALL=(ALL) NOPASSWD: ALL

永遠に修正してください:-)。

第二に、スクリプトの所有者を確認してください。私は所有者と権限が重要であると確信しています。所有者がこのように変わりましたsudo chown root:root /path/to/script.sh。また、権限を744に設定することを検討してくださいsudo chmod 744 /path/to/script.sh

関連情報