[ansible] 작업 또는 작업 세트별로 사용자를 전환하는 방법은 무엇입니까?

내 플레이 가능한 플레이 북에 반복되는 테마 sudo: yes는 특정 사용자를 위해 sudo 권한 ( ) 으로 명령을 실행해야한다는 것입니다. 이상적으로는 sudo를 사용하여 해당 사용자로 전환하고 명령을 정상적으로 실행하는 것이 좋습니다. 그런 다음 chowning 디렉토리와 같은 일반적인 사후 명령 정리를 수행하지 않아도됩니다. 다음은 내 플레이 북 중 하나의 스 니펫입니다.

- 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가 필요하더라도 명령 또는 명령 세트를 다른 사용자로 실행할 수 있습니다.



답변

Ansible 1.9 이상

Ansible 사용 become, become_userbecome_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.

지시문은 명령이 사용되는 블록의 범위에 적용됩니다 ( 예제 ).

몇 가지 추가 예는 호스트 및 사용자 를 참조 하고 자세한 문서는 (권한 에스컬레이션)이 됩니다.

작업 범위 becomebecome_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


답변

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


답변

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를 참조 하십시오.


답변

해결책은 var ( http://docs.ansible.com/playbooks_roles.html ) include문 을 사용하는 것이지만 작업 수준 대신 플레이 북에서 수행해야합니다.remote_user


답변

(있는 경우)에 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"
}


답변