LoginSignup
6
5

More than 5 years have passed since last update.

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

Posted at

結論

  • 以下の通り(左項で設定した値が優先される)。
    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"についてはこちら 

6
5
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
6
5