Help us understand the problem. What is going on with this article?

[ansible]remote_user 指定の優先順位について

More than 3 years have passed since last update.

結論

  • 以下の通り(左項で設定した値が優先される)。
    playbook > コマンドパラメータ > ansible.cfg

  • ansible-playbookコマンドで -u ("remote_user"を指定するオプション) が効かなかったため、コードリーディングしたところ気がついた1。公式ドキュメントをよく読めば書いてあるかもしれない。

  • playbookとコマンドパラメータどちらでも指定可能なその他の値についても、同様の動作をするはず。

動作確認

バージョン情報

$ ansible-playbook --version
ansible-playbook 1.9.3

確認手順

  • ansible.cfg及びplaybookにて、remote_user->root を指定
ansible.cfg
$ grep remote_user /etc/ansible/ansible.cfg
remote_user = root
playbook(before)
$ head -5 test.yml
---
- hosts: all
  vars:
  remote_user: root
  sudo: yes


  • ansible-playbookコマンドを実行すると、-u オプションで指定したユーザではなく、rootユーザでssh接続しようとして失敗する(キーペアの不一致)
$ sudo ansible-playbook test.yml -l xxx.xxx.xxx.xxx -u ansibleuser --private-key="xxx.id_rsa" -vvv

PLAY [all] ********************************************************************

GATHERING FACTS ***************************************************************
<xxx.xxx.xxx.xxx> ESTABLISH CONNECTION FOR USER: root ★
<xxx.xxx.xxx.xxx> REMOTE_MODULE setup
<xxx.xxx.xxx.xxx> EXEC ssh -C -tt -v -o ControlMaster=auto -o ControlPersist=60s -o ControlPath= ...
        :
fatal: [xxx.xxx.xxx.xxx] => SSH Error: Permission denied (publickey,gssapi-keyex,gssapi-with-mic).
        :
xxx.xxx.xxx.xxx            : ok=0    changed=0    unreachable=1    failed=0


  • playbookにて、remote_user行をコメントアウト
playbook(after)
$ head -5 test.yml
---
- hosts: all
  vars:
# remote_user: root
  sudo: yes


  • あらためてansible-playbookコマンドを実行すると、-u オプションで指定したユーザでssh接続に成功する
$ sudo ansible-playbook test.yml -l xxx.xxx.xxx.xxx -u ansibleuser --private-key="xxx.id_rsa" -vvv

PLAY [all] ********************************************************************

GATHERING FACTS ***************************************************************
<xxx.xxx.xxx.xxx> ESTABLISH CONNECTION FOR USER: ansibleuser ★
<xxx.xxx.xxx.xxx> REMOTE_MODULE setup
<xxx.xxx.xxx.xxx> EXEC ssh -C -tt -v -o ControlMaster=auto -o ControlPersist=60s -o ControlPath= ...
        :
ok: [xxx.xxx.xxx.xxx]
        :
xxx.xxx.xxx.xxx            : ok=1    changed=0    unreachable=0    failed=0

所感

  • roleにまとめてうまいことやってくれという設計思想かもしれないが、ちょっとしたオペレーションをansibleで書きたい、既存環境がぐちゃぐちゃ、等の理由により、適宜コマンドパラメータで"remote_user"を指定したい場面はあると思う。
  • そのため、ちょっとしたplaybookには"remote_user"を指定しないほうが融通がきいていいかなと思った。


  1. "remote_user"についてはこちら 

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away