web-dev-qa-db-ja.com

Ansibleはどのユーザーとしてコマンドを実行しますか?

バックグラウンド

私の質問は簡単に思えますが、より複雑になります。

基本的に、サーバーを手動で保守するのは本当にうんざりしました(バックグラウンドで叫ぶ)そして、サーバー管理者をより住みやすいものにする方法を見つける時だと判断しました。そのとき、私はAnsibleを見つけました。いいね? bashスクリプトを作成する確かなビート(louder scream)私が自動化したかったすべてのものについて。

どうしたの?

Ansibleプレイブックが特定の処理を実行するユーザーを特定するのに多くの問題を抱えています。また、特定のタスクを実行するユーザーを指定する機能も必要です。特定の使用例は次のとおりです。

別のユーザーとしてレポを複製する:

私の目的は、node-js webappを別のユーザーから実行することです。このユーザーは、bill(これは、Sudoを使用して、ノードサーバーを起動するスクリプトを実行するためにのみ使用できます)すべてのコマンドにSudoを使用できるrootまたはユーザーに)。これを行うには、Ansibleのgitモジュールにgitリポジトリをbillとしてクローンさせる機能が必要です。どうすればいいですか?

Ansibleがどのようにルートを獲得するかを知る:

私が理解している限り、「ユーザー」とプレイブックファイルの先頭を定義することで、Ansibleが管理しているサーバーに接続するユーザーを設定できます。わからないことがあります。ユーザー名joeで接続するように指示し、aptモジュールでパッケージを更新するように要求した場合、どのようにルートを取得しますか。通常、sudoはパスワードの入力を求めるプロンプトを表示するので、そのようにしておくことをお勧めします(セキュリティのため)。

最終リクエスト

私はAnsibleのドキュメントを精査し、グーグルでいくつかの(徹底的だと思っていた)を行い、一般的には自分でそれを理解しようとしましたが、この情報は私を逃れ続けています。

私はAnsibleを初めて使用しますが、ほとんど単純明快ですが、Ansibleの実行方法、実行するユーザー、および異なるユーザーが使用するユーザーを指定する方法/場所を正確に理解できれば、非常に有益です。

事前にありがとう

44
Michael

AnsibleのドキュメントサイトのHosts and Usersセクションを読むと便利な場合があります。

http://docs.ansible.com/playbooks_intro.html#hosts-and-users

要約すると、ansibleは、remote_user変数で指定されたユーザーとしてプレイブック内のすべてのコマンドを実行します(ansible> = 1.4、userを使用している場合)。タスクを特定のユーザーとして実行する必要がある場合、タスクごとにこの変数を指定することもできます。

プレイブック/タスクでSudo: trueを使用して、Sudoを使用して実行します。 rootを使用したくない場合は、Sudo_user変数を使用して、Sudoのユーザーを指定します。

実際には、Sudo特権を持つdeployユーザーとしてプレイブックを実行するのが最も簡単であることがわかりました。パスワードを使用せずにdeployとして任意のホストにSSHできるようにSSHキーを設定します。これは、パスワードを使用せずにプレイブックを実行でき、必要に応じてSudoを使用できることを意味します。

この同じユーザーを使用して、gitリポジトリのクローン作成やサービスの開始/停止などを行います。サービスをより低い特権のユーザーとして実行する必要がある場合は、initスクリプトにそれを任せます。 node.js init.dスクリプトをGoogleで簡単に検索すると、CentOSの次のコードが明らかになりました。

https://Gist.github.com/nariyu/121141

このように物事を行うと、シンプルに保つのに役立ちます。

お役に立てば幸いです。

49
mjackson

私の2セント:

  1. Ansibleはローカルユーザー(Mikeなど)を使用して、リモートマシンにSSH接続します。 (つまり、マイクがマシンにSSH接続できる必要がありました)
  2. 必要に応じて、そこからリモートユーザーに変更できます。
  3. 必要に応じて、マイクが許可されている場合は、Sudoも使用できます。ユーザーが指定されていない場合、~/.ansible.cfgローカルマシン上。
  4. Remote_userにSudoパラメータを指定すると、no.3のようにrootではなくそのユーザーが使用されます。

playbooks を使用して、異なる状況と異なるユーザーまたはSudoを指定できます。

プレイブックでは、選択したインベントリに属する​​各マシンで実行されるロールを定義します。

インフラストラクチャのセットアップ方法に関する説明については、 Ansible best practice を読むことをお勧めします。

Ansibleが使用する特定のモジュールを参照しておらず、あなたの質問がpythonに関連していないため、pythonタグを持つ質問の使用は見つかりません。

5
Jimmy Kane

Ansible> = 1.9では特権エスカレーションコマンドが使用されるため、必要に応じてタスクを実行し、セカンダリユーザーとしてリソースを作成できます。

- name: Install software
  Shell: "curl -s get.dangerous_software.install | Sudo bash"
  become_user: root

http://docs.ansible.com/ansible/become.html#become-privilege-escalation

4
Michael