web-dev-qa-db-ja.com

タスクまたはタスクセットごとにユーザーを切り替え方法

私の手ごたえのあるプレイブックにある繰り返しのテーマは、私は特定のユーザーのためにそれをしたいのでSudo特権(Sudo: yes)でコマンドを実行しなければならないことです。理想的には、私はSudoを使ってそのユーザーに切り替えてコマンドを普通に実行したいと思います。それから私はいつものポストコマンドでディレクトリを変更するなどのクリーンアップをする必要がないからです。これが私のプレイブックの1つの抜粋です。

- name: checkout repo
  git: repo=https://github.com/some/repo.git version=master dest={{ dst }}
  Sudo: yes
- name: change perms
  file: dest={{ dst }} state=directory mode=0755 owner=some_user
  Sudo: yes

Sudoがそのユーザーにsuを要求する場合でも、理想的には別のユーザーとしてコマンドまたはコマンドのセットを実行できます。

139
rgrinberg

Ansible 1.9以降

Ansibleは特権の昇格を達成するためにbecomebecome_user、およびbecome_methodディレクティブを使用します。それらをプレイ全体またはプレイブックに適用したり、付属のプレイブックに設定したり、特定のタスクに設定したりできます。

- name: checkout repo
  git: repo=https://github.com/some/repo.git version=master dest={{ dst }}
  become: yes
  become_user: some_user

become_withを使用して特権の昇格をどのように達成するかを指定できます。デフォルトはSudoです。

この指令は、それが使用されているブロックの有効範囲に対して有効です( examples )。

その他の例については、 ホストとユーザー を参照してください。より詳細なドキュメントについては、 Become(Privilege Escalation) を参照してください。

タスクスコープのbecomeおよびbecome_userディレクティブに加えて、Ansible 1.9では、明示的なディレクティブがない場合に、プレイ中にこれらの値を設定するための新しい変数とコマンドラインオプションが追加されました。

Ansible 2.0.2.0以降、以下で説明されている古いSudo/Sudo_user構文はまだ機能しますが、「この機能は将来のリリースで削除される予定です」と述べています。


Ansible 1.9では非推奨となり、削除が予定されている以前の構文

- name: checkout repo
  git: repo=https://github.com/some/repo.git version=master dest={{ dst }}
  Sudo: yes
  Sudo_user: some_user
215
Brett

Ansible 2.xでは、タスクのグループにblockを使用できます。

- block:
    - name: checkout repo
      git:
        repo: https://github.com/some/repo.git
        version: master
        dest: "{{ dst }}"
    - name: change perms
      file:
      dest: "{{ dst }}"
      state: directory
      mode: 0755
      owner: some_user
  become: yes
  become_user: some user
32
Arbab Nazar

Ansible> 1.4では、実際にタスクレベルでリモートユーザを指定して、そのユーザとしてログインし、Sudoに頼らずにそのコマンドを実行できるようにする必要があります。そのユーザーとしてログインできない場合は、Sudo_userソリューションも機能します。

---
- hosts: webservers
  remote_user: root
  tasks:
    - name: test connection
      ping:
      remote_user: yourname

http://docs.ansible.com/playbooks_intro.html#hosts-and-users を参照してください。

22
trcarden

解決策はincludeステートメントをremote_user var(そこに記述している: http://docs.ansible.com/playbooks_roles.html )と一緒に使うことですが、タスクレベルではなくplaybookで行う必要があります。

7

become_methodに指定したデフォルトのメソッド(存在する場合)をオーバーライドするためにansible.cfgを指定することができ、それはSudo, su, pbrun, pfexec, doas, dzdo, ksuのいずれかに設定できます。

- name: I am confused
  command: 'whoami'
  become: true
  become_method: su
  become_user: some_user
  register: myidentity

- name: my secret identity
  debug:
    msg: '{{ myidentity.stdout }}'

表示する必要があります

TASK [my-task : my secret identity] ************************************************************
ok: [my_ansible_server] => {
    "msg": "some_user"
}
1
avi.elkharrat