プレイブックを実行しているユーザーとは別のユーザーとして特定の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
自身で定義されたユーザーではない別のユーザーとして特定のタスクを実行するにはどうすればよいですか?
あなたはそこで両方の設定を誤解しています:
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
Ansible 1.9以降、Sudo
という表現はbecome
に置き換えられました。
Sudo: yes
Sudo_user: some_user
(しゃれ意図):
become: yes
become_user: some_user