2016-05-04 16 views
2
  • を実行しようとしたとき、私は、ユーザーを作成し、そのユーザーシェルスクリプト「sudoを:なしのtty存在と指定されていませんaskpassパッケージプログラム」sudoコマンドに

    sudo useradd -m devops 
    sudo passwd devops 
    sudo adduser devops sudo 
    su - devops -c "sh /path/to/myscript.sh" 
    
  • として別のスクリプトを実行するシェルスクリプトを持っています

    このスクリプトは、ユーザーを作成し、パスワードを設定し、sudoグループにユーザーを追加します。

  • myscript.shには、sudo previlagesを使用するコマンドが含まれています。 (sudo apt-get update、sudo apt-get installソフトウェア - プロパティ - 共通など)。 ssh-keygen、curl、wgetのようなコマンドもあります。
  • sudo以外のコマンドはすべて正しく実行され、結果は例外として生成されます。
  • しかしsudoは
  • を「全くのtty存在していないaskpassパッケージプログラムが指定されていません」これはなぜこのような場合に起こるんし、どのように私はこれを克服することができますか?エラーを与えることによって、失敗したコマンド
  • 私は同様の質問を見ましたが、この文脈で明確な説明があれば感謝します。ありがとうございます。

答えて

3

この交換してみてください。これで

su - devops -c "sh /path/to/myscript.sh" 

を:

sudo -u devops -H sh -c "sh /path/to/myscript.sh" 

su-cオプションは、対話型モードをサポートしていません:

-c, --command COMMANDコマンドを指定します。によって呼び出される-cを使用しているシェル。

実行されたコマンドには制御端末がありません。このオプション は、TTYを制御する を必要とする干渉プログラムの実行には使用できません。

man su

ところで、私はどこにでもスクリプト内sudoを使用することはありません。スクリプトには、単にroot権限が必要な場合があります。スクリプト内では、上記のsudoコマンドを使用して、必要に応じて特権を削除することができます。

+0

ありがとうございます、このスクリプトは動作します。しかし、私はあなたの答えの最後の部分を理解していませんでした。はい、コマンドの多くはroot権限を必要とします。 sudoを使用する際の問題は何ですか? –

+0

@ user3356760、それはかなり問題ではありません。 "マスター"スクリプトが主にrootのために書かれている場合は、rootのために 'sudo'を省略し、ユーザにroot権限でスクリプトを実行させることをお勧めします。さらに、 'sudo'はユーザーの資格を5分間キャッシュします('/etc/sudoers'で 'timeout'によって上書きされない場合)。ユーザは再びパスワードを入力する必要があります。したがって、 'sudo'で起動したプロセスが' timeout'よりも多く実行された場合、次の 'sudo'呼び出しは再びパスワードを要求します。ああ、 –

+0

しかし、ユーザーが終了するまで、資格情報はセッションのために保持されます。再度、感謝します。 –

関連する問題