1

ユーザーとして実行されるファブリック展開スクリプトを作成していますMyAppUser(ホスト「MyAppUser@myapp.mycompany.com」、sshキーが機能しているため、パスワードは必要ありません)。手順の 1 つは、ファイルを にコピーし/etc/init、アクセス許可を変更して、将来のデプロイMyAppUserでそのファイルを上書きできるようにすることです。

MyAppUsersudoer ではありません。そうであってはなりません。コピーを実行するには、/etc/init昇格した特権が必要です...そのため、ユーザーにユーザー名の入力を求めて実行するのに行き詰まっています:

run('su %s -c "sudo cp /home/myappuser/git/myapp/myapp.conf /etc/init"')

これは機能しますが、同じパスワードを 2 回入力するように求められます。(私sudoerです)。

ここには多くの質問がありますが、中心的なものは次のとおりです。

  1. sudo("sudo cp /home/myappuser/git/myapp/myapp.conf /etc/init", user='Me)期待どおりに動作しないのはなぜですか? 最初の sudo (ファブリックによって実行) が無視されているようuserです。
  2. root 権限が必要なコマンドを、sudoer である別のユーザーとして実行するより良い方法はありますか? (ファブリックの質問ではなく、Bash の質問です)。
4

1 に答える 1

1

1: MyAppUser は sudoers に含まれていないとおっしゃいました。そのため、sudo を実行できません。これを確認するには debug フラグを使用しますが、基本的には次のようにしています。

$ ssh MyAppUser@myapp.mycompany.com "sudo -u me 'sudo cp ...'"

したがって、MyAppUser がまったく sudo できない場合、この使用として接続しているファブリックは sudo できません。

2: 複数のユーザーがこのマシンに接続できる場合は、settings() コンテキスト マネージャーまたは execute() 関数を使用して、ホスト文字列で接続するユーザーとして me (プロンプトされたユーザーを参照) を指定します。例えば:

execute(setup_task, host="me@myapp.mycompany.com")

setup_task は、init ディレクトリへのコピーを実行するタスクです。

于 2013-08-01T05:55:55.900 に答える