web-dev-qa-db-ja.com

特定のユーザーとしてのAnsibleタスクの実行

プレイブックを実行しているユーザーとは別のユーザーとして特定の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_エラーが表示されます。ただし、sudoersファイルにsomeusername ALL=(ALL) NOPASSWD:ALLを示す行があり、Sudoを使用してコマンドを発行すると、someusernameはパスワードを要求しません。

では、hostsファイルまたはroot自身で定義されたユーザーではない別のユーザーとして特定のタスクを実行するにはどうすればよいですか?

23
errata

あなたはそこで両方の設定を誤解しています:

  • remote_user は、Ansibleが接続に使用しているSSHユーザーを制御するAnsible設定です:ssh ${REMOTE_USER}@remotehost

  • someusername ALL =(ALL)NOPASSWD:ALL は、ユーザーsomeusernameがパスワードなしで任意のホストですべてのコマンドを実行できるようにするSudo設定です。ただし、誰もsomeusernameとしてコマンドを発行することはできません。

理想的には、適切なユーザーとして直接ログインし、それがremote_userがすべてです。ただし、通常は管理ユーザー(たとえば、ubuntu)としてのみログインでき、別のユーザー(scrapyなど)としてSudoコマンドを実行する必要があります。その後、あなたはremote_userをログインするユーザーに追加し、次のansibleプロパティをジョブに追加します。

- name: log in as ubuntu and do something as scrapy
  remote_user: ubuntu
  Sudo: true
  Sudo_user: scrapy
  Shell: do-something.sh
20
Capi Etheriel

Ansible 1.9以降、Sudoという表現はbecomeに置き換えられました。

Sudo: yes
Sudo_user: some_user

(しゃれ意図):

become: yes
become_user: some_user

詳細はこちら: https://stackoverflow.com/a/22749788/402727

16
ex-nerd