특정 사용자로 Ansible 작업 실행


23

플레이 북을 실행하는 사용자와 다른 사용자로 특정 Ansible 작업을 실행하려고합니다. 내 .yml파일은 다음과 같습니다

---

- hosts: staging_servers
  tasks:    
    - name: check user
      remote_user: someusername
      shell: whoami

이 작업을 실행하면 whoami명령 이 작업 에서 정의한 것과 다른 사용자를 반환 한다는 것을 알 수 있습니다 (정확하게는 hosts라는 파일에 정의 된 사용자를 반환 함 ubuntu).

또한 다음과 같이 작업을 정의하려고했습니다.

---

- hosts: staging_servers
  tasks:
    - name: check user
      sudo: yes
      sudo_user: someusername
      shell: whoami

하지만 파일 에 암호를 요구하지 않는 원격 컴퓨터에서 명령을 내리는 Missing sudo password줄이 있지만 ' '오류가 발생 합니다.sudoerssomeusername ALL=(ALL) NOPASSWD:ALLsudosomeusername

그렇다면 hosts파일이나 root자신에 정의 된 사용자가 아닌 다른 사용자로 특정 작업을 어떻게 실행할 수 있습니까?

답변:


19

두 설정을 잘못 이해하고 있습니다.

  • remote_user 는 Ansible이 연결하는 데 사용하는 SSH 사용자를 제어하는 ​​Ansible 설정입니다.ssh ${REMOTE_USER}@remotehost

  • someusername ALL = (ALL) NOPASSWD : ALL 은 사용자 someusername가 비밀번호없이 모든 호스트에서 모든 명령을 실행할 수 있도록하는 sudo 구성입니다 . 다른 사람이 명령을 발행하는 것을 허용하지 않습니다 someusername.

이상적 으로는 올바른 사용자로 직접 로그인 하면 그게 remote_user전부입니다. 그러나 일반적으로 관리 사용자 (예 :)로만 로그인 ubuntu하고 다른 사용자 (예 :)로 명령을 sudo해야합니다 scrapy. 그런 다음 remote_user로그인 한 사용자에게 맡기고 작업에 다음과 같은 속성을 추가해야합니다.

- name: log in as ubuntu and do something as scrapy
  remote_user: ubuntu
  sudo: true
  sudo_user: scrapy
  shell: do-something.sh

1
내가 참조. 이것을 명확히 해 주셔서 감사합니다! 그러나 특정 작업을 특정 사용자로 실행하는 방법은 무엇입니까?
정오표

1
remote_user실제로 ssh와 마찬가지로 로컬 컴퓨터의 현재 사용자 가 기본값입니다.
Capi Etheriel

좋아, 그러나 이와 같은 설정으로 여전히 ' Missing sudo password'오류가 발생합니다. 특정 사용자의 비밀번호를 요구하지 않는 방법이 있습니까?
정오표

나는 sudoers에 줄을 추가하여 답을 찾았다 고 생각합니다. ubuntu ALL=(someusername) NOPASSWD: ALL, 그러나 나는 이것 뒤에 숨겨진 보안에 대해 생각해야합니다 ... sudoers 에이 줄을 추가하는 것 외에 다른 방법이 있습니까?
정오표

1
올바른 방법은 원격 사용자가 직접 로그인하도록하는 것입니다.
Capi Etheriel

16

Ansible 1.9 이후에는 sudo문구가로 대체 become되었으므로

sudo: yes
sudo_user: some_user

다음과 같이됩니다.

become: yes
become_user: some_user

자세한 내용은 여기를 참조하십시오 : https : //.com/a/22749788/402727

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.