特定のユーザーとして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」エラーが発生しsudoersますが、パスワードを要求しないようにリモートマシン上でsomeusername ALL=(ALL) NOPASSWD:ALLコマンドを言って発行するファイル内の行があります。sudosomeusername

それでは、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、ログインするユーザーに任せて、次のansibleプロパティをジョブに追加する必要があります。

- 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_usersshは、実際に、同じよう-ローカルマシンで、現在のユーザーにデフォルト設定。
カピエテリエル

わかりましたが、このような設定では、まだ ' Missing sudo password'エラーが発生します。その特定のユーザーのパスワードを要求しないようにする方法はありますか?
正誤表

私は答えを見つけて、sudoersに行を追加ubuntu ALL=(someusername) NOPASSWD: ALLしたと思います:、しかしこの背後にあるセキュリティについて考える必要があります...この行をsudoersに追加する以外の方法はありますか?
エラッタ

1
適切な方法は、リモートユーザーが直接ログインできるようにすることです。
カピエテリエル

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.